面向对象的思维过程

介绍

本文是关于面向对象思维过程系列文章的第一部分,选择这个主题作为书籍或专栏的标题是一个重大 的决定,做出这个选择并不简单,因为已经有很多面向对象主题的好书和文章了,包括面向对象分析、面 向对象设计、面向对象编程,设计模式、面向对象的数据库、统一建模语言(UML)、不同的面向对象编 程语言以及其它许多面向对象的主题。

但读完这些书之后,许多人忘记了这些主题都是建立在一个基础之上的:你是如何思考面向对象方法 的。不幸的是,许多软件专业人员花费了大量时间在这些书中,但却没有努力真正理解包含在它们之中的 思想。

我主张学习面向对象思想时不是靠学习一个特定的开发方法或一套工具来完成的,面向对象做事的方 法是一个简化表达的思维方式,本专栏所有文章都是与面向对象思维过程有关的。

从面向对象思维过程中将开发方法和工具分开不是一件容易的事情,许多人都是通过一个开发方法或 一个开发工具引入面向对象的思想的,许多C程序员都是通过向C++移植才接触面向对象的思想的,还有一 些软件专业人员是使用UML表达对象模型时才接触到面向对象思想的。

理解学习面向对象思想和使用支持范例的方法和工具之间的重要不同之处是很重要的,在这篇文章中 ,Craig Larman表述了“UML是什么,不是什么”。

不幸的是,按照软件工程和UML图形表示语言的背景,学习阅读和编写UML标记的技巧看起来就和面向 对象分析和面向对象设计差不多,当然,这并不是面向对象,后者比前者重要得多,因此,我建议学习面 向对象分析和设计的技巧,它比UML标记或使用一个用例工具重要多了。

虽然学习一门建模语言是很重要的一步,但首先学习面向对象技巧更重要,在没有面向对象思想之前 学习UML就和没有一点电气知识就去学习如何阅读一个电气图有点类似。

相同的问题发生在选择编程语言,正如前面谈到的,许多C程序员是通过移植C++而接触到面向对象思 想的,通常,C++开发人员只是使用C++编译器的C程序员。

即使面向对象语言如Java、C# .NET和Visual Basic .NET已经变得非常流行,但这个问题仍然存在, 有许多Visual Basic程序员现在必须跳跃到Visual Basic .NET,同样,也有许多C++程序员可能被迫执行 面向对象的实践,被要求转移到Java或C#,除了思考面向对象的方法外他们没有别的选择。

早期的Visual Basic不是面向对象的,C++也是向后兼容C,正是因为如此,就出现了大量的使用C++编 译器,但同时只使用了C语法的情况,放弃了所有C++面向对象的特性,更糟糕的是,一个使用了足够多面 向对象特性的程序使得程序难以理解,这就是对面向对象思想的滥用。因此,当你在使用面向对象的开发 方式时,首先学习面向对象思想的基础显得非常重要,不要受到编程语言(如C++,C#或Java)或建模语 言(如UML)的影响,多花点时间学习面向对象的思维过程。

当我在1980年末上我的第一堂Smalltalk课时,老师说这堂课是一堂全新的面向对象范例的思维方法, 它接着说即使我们大多数人都是非常优秀的程序员,但我们中肯定有大约10%到20%的人永远都不会掌握面 向对象的思维方式,如果这种情况确实属实,很有可能是那部分人从来都没有花时间研究范例和学习面向 对象思想。

本专栏的范围

现在应该非常清楚了,在一头扎进编程语言和建模语言之前,先成为面向对象思维过程的忠实信徒吧 ,专栏内容将会包括Java、C#和VB .NET代码示例,同样也会有UML图表,但真正理解面向对象思想时,你 不需要知道Java、C#或UML。我已经说过,首先应学习思想,为什么要那么多代码或UML图表呢?首先,它 们都是描述面向对象思想的好工具,第二,它们对面向对象过程都非常重要,关键是不要集中在代码或 UML,而是使用它们来理解这个思想。

并不是这个专栏就不教代码语法或UML了,我希望通过这个专栏让你对其它面向对象主题引起兴趣,如 面向对象分析、面向对象设计和面向对象编程。

时间: 2024-10-02 17:19:34

面向对象的思维过程的相关文章

全面理解面向对象的 JavaScript

全面理解面向对象的 JavaScript JavaScript 函数式脚本语言特性以及其看似随意的编写风格,导致长期以来人们对这一门语言的误解,即认为 JavaScript 不是一门面向对象的语言,或者只是部分具备一些面向对象的特征.本文将回归面向对象本意,从对语言感悟的角度阐述为什么 JavaScript 是一门彻底的面向对象的语言,以及如何正确地使用这一特性. 前言 当今 JavaScript 大行其道,各种应用对其依赖日深.web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架

全面理解面向对象的 JavaScript(来自ibm)_javascript技巧

当今 JavaScript 大行其道,各种应用对其依赖日深.web 程序员已逐渐习惯使用各种优秀的 JavaScript 框架快速开发 Web 应用,从而忽略了对原生 JavaScript 的学习和深入理解.所以,经常出现的情况是,很多做了多年 JS 开发的程序员对闭包.函数式编程.原型总是说不清道不明,即使使用了框架,其代码组织也非常糟糕.这都是对原生 JavaScript 语言特性理解不够的表现.要掌握好 JavaScript,首先一点是必须摒弃一些其他高级语言如 Java.C# 等类式面向

ASP面向对象编程探讨及比较

比较|编程|对象|比较 ASP是Microsoft于较早期推出的动态网页编程技术,但其结合ADO对数据库方便快捷的访问.结合XML.COM/ActiveX等其它技术 实现服务器多层结构的功能使它在今天还有着顽强的生命力,并且依然有着一定的发展.ASP.Net虽然在架构上完全不同于ASP,但它很多内建对象也是基 于ASP进行扩展的.网上有无数的介绍ASP的文章,却鲜有介绍ASP面向对象以及与其它语言比较的,这也就是我下决心写这篇文章的原因.因为是早期的版本,ASP只提供了很弱的面向对象的接口.

JavaScript面向对象程序设计(8) 优雅的封装还是执行的效率?

优雅的封装还是执行的效率?这是一个悖论. 优雅封装的程序看起来是那么的美妙:每个属性被隐藏在对象之后,你所能看到的就是这个对象让你 看到的,至于它到底是怎么操作的,这个不需要你操心. 执行的效率就是另外一回事.就像是C语言和面向对象的C++之间的差别:C++很优雅,但是执行效率 ,无论是编译后的二进制代码还是运行期的内存的占用,都要比简单的C语言多出一截来. 这个问题在脚本语言中显得更加重要,因为JavaScript根本就是一种解释语言,解释语言的执行效率 要比编译语言低很多. 1.优雅的封装

面向对象-领域对象 和 实现对象是什么?

问题描述 领域对象 和 实现对象是什么? 如题,在面向对象技术中文版(原书名为object-oriented Technology)一书中领域对象 和 实现对象是什么意思?(原文为domain object与implementation object) 解决方案 要看上下文,具体它怎么解释的,从字面上看,前者代表数据实体,比如User Product等等,后者代表业务逻辑,比如ProductService,里面包含了GetProducts GetOrders等等逻辑 解决方案二: 领域模型是对领

JAVA之旅(四)——面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块

JAVA之旅(四)--面向对象思想,成员/局部变量,匿名对象,封装 , private,构造方法,构造代码块 加油吧,节奏得快点了 1.概述 上篇幅也是讲了这点,这篇幅就着重的讲一下思想和案例 就拿买电脑来说吧,首先,你不懂电脑,你去电脑城买电脑,和大象装冰箱里一样,是什么步骤?咨询 砍价 ,谈妥了就那电脑走人,对吧,这就是面向过程的思想,而面向对象是:你有一个哥们,他懂电脑,什么都会,你只要带他去,就行,你这个哥们就是对象,在JAVA中,我们就是操作一个对象去完成各种各样的操作的,这就是面向对

讲解Python中面向对象编程的相关知识

  这篇文章主要介绍了深入讲解Python中面向对象编程的相关知识,是Python入门学习中的基础知识,需要的朋友可以参考下 Python从第一天开始就是面向对象的语言.正因为如此,创建和使用类和对象是非常地容易.本章将帮助您在使用Python面向对象编程的技术方面所有提高. 如果没有任何以往面向对象(OO)的编程的经验,那么可能要了解一些基本的入门课程就可以了,或者至少某种形式的教程,让你有了解基本概念. 但是,这里会比较少地介绍面向对象编程(OOP): OOP术语概述 类: 用户定义的原型对

PHP面向对象精要总结

 1 使用extends实现继承以及重载.魔术方法的含义 class B extends A 声明的时候B里可以没有A里的方法 调用的时候: $b=new B(); $b->A里的方法(); $b->A里的属性=1; $b->B里的方法(); $b->B里的方法(); 如果$a=new A(); 可以 $a->A里的方法(); $a->A里的属性=1; 不可以 $a->B里的方法(); $a->B里的方法();   重载:B继承A ,B里实现和A同名的方法属

php面向对象(基础)

最近重新学习了php面向对象这一部分的知识,做了下笔记,分享给大家,其中一部分为自己的简介,加色部分一般为自己认为比较重点或需要注意的地方,分享给大家,还希望大家多提意见共同学习. 1. 析构函数:__destruct ( ) //这是一个析构函数,在对象销毁前调用 function __destruct() { echo "再见".$this->name.""; } 2. 构造函数:__construct( ) PHP子类能否继承父类的构造方法? 如果没有定