一、面向对象技术概论(下)

1.2 面向对象的核心概念

从理论上说,面向对象技术拥有四大基本特性。

(1)封装

这是一种隐藏信息的特征。拿上节引例来说,类CalculateDate将数据结构与算法隐藏在类的内部,外界使用者无需知道具体技术实现细节即可使用此类。封装这一特性不仅大大提高了代码的易用性,而且还使得类的开发者可以方便的更换新的算法,这种变化不会影响使用类的外部代码。可以用以下公式展示类的封装特性:

封装的类=数据+对此数据所进行的操作(即算法)

通俗的说,封装就是:包起外界不必需要知道的东西,只向外界展露可供展示的东西。

在面向对象理论中,封装这个概念拥有更为宽广的含义。小到一个简单的数据结构,大到一个完整的软件子系统,静态的如某软件系统要收集数据信息项,动态的如某个工作处理流程,都可以封装到一个类中。

具备这种“封装”的意见,是掌握面向对象分析与设计技巧的关键。

(2)抽象

讲到抽象,不得不涉及到现代科学技术的基础——数学。

数学是一门抽象的科学,面对着纷繁复杂的世间万物,数学不理会各种事物的独特特性,而只抽取它们在数量上的特性,深刻揭示了“世间万物”在数量上表现出的共同规律,抽象正是数学的本质特征。

数学的一个分支——离散数学是计算机科学的根基之一,因此,计算机科学从诞生之日起,就与数学有着密不可分的联系,抽象思维也是计算机科学的主要思维方法之一。

在使用面向对象的方法设计一个软件系统时,首先就要区分出现实世界中的事物所属的类型,分析它们拥有哪些性质与功能,再将它们抽象为在计算机虚拟世界中才有意义的实体——类,在程序运行时,由类创建出对象,用对象之间的相互合作关系来模拟真实世界中事物的相互关联。

在从真实世界到计算机虚拟世界的转换过程中,抽象起了关键的作用。

(3)继承 

真实世界中,事物之间有着一种派生关系,比如“食品”这一大类中包括“水果”这一子类,而“苹果”又包含在“水果”这一子类中。用图形表示:

食品

水果       蔬菜

苹果        香蕉        土豆

在计算机世界中,以面向对象的观点不仅将上述事物抽象为类,而且将事物之间的派生关系也一并模拟出来,这种关系成为“继承”:

Food

Fruit               Vegetable

Apple          Banana                Patato

在面向对象软件系统中,继承除了模拟现实世界中事物关系这一作用,还是一个“重用已有代码而又不破坏已有代码”的方法。举例来说:

现在要开发一个B项目,架构设计师发现以前完成的A项目中有部分类完全可以在B项目中重用,但需要增强这些类的功能以便适用于B项目。如果从A项目中直接抽取这些类的源代码并加以修改,虽然可以满足B项目的需要,但现在却需要维护两套功能类似的类代码,加大了管理的成本。在这种情况下,选择从A项目的类中用继承的方法派生出新类用在B项目中是一个可选的方案,既满足了新项目的需要,又避免了大量的重复代码与双倍的代码维护成本。

(4)多态

在现实生活中,我们常说:苹果是一种水果。苹果与水果这两个概念之间其实是一种特性与共性的关系,简称为IS_A关系,其特点为:水果拥有的特性,苹果一定有。

在前面的小节中我们用继承模拟了IS_A关系,“水果(Fruit)”是基类,“苹果(Apple)”是子类,IS_A关系可以用另一种方式来表达——基类拥有的特性,子类一定有。因此,可以把子类看成是一种“特殊”的基类。

举个例子:“给张三一个苹果”和“给张三一串香蕉”,虽然是两件不同的事,却可以统一说成“给张三一个水果”。

用“给张三一个水果”来指代“给张三一个苹果”和“给张三一串香蕉”,虽然在语义上比较“模糊”,但其适用性更广了,除了“苹果”和“香蕉”,以后还可以是“梨子”、“西瓜”、“葡萄”……,都可以用“给张三一个水果”来代表。

这种用一个比较抽象的事物来取代具体的事物的表达方法,在面向对象软件中用“多态”这一特性来模拟。

在编程时应用多态的方法,可以用一句话来表示:

用抽象的类编程。     注:这里,我们将“接口”也看成是一种特殊的抽象类,抽象类中可以有非抽象方法,而接口中所有方法都是抽象方法。

即在代码中本应使用某一具体子类的地方使用较为抽象的基类对象,这种方法所带来的好处是多态的代码具有“变色龙”的特性,即在不同的条件下,同样代码可以完成不同的功能。

适当地在开发中应用多态特性,可以开发出可扩充性很强的系统。

(5)小结

面向对象的四大特征不是彼此独立的,“抽象”和“封装”更多地体现为一种思维方法,主要体现在面向对象系统的总体分析和设计中,“继承”和“多态”则多应用于具体子系统和软件模块的设计与编码过程中,而且“继承”是“多态”的基础。

1.3 面向对象技术与Web开发的关系

在早期静态网页的时代,网页主要是由HTML代码表达的,Web服务器完成的工作只是应浏览器的请求传送网页,职责单一,除非需要开发Web服务器本身,开发以静态网页为主体的网站与面向对象技术并没有什么直接关系。

在早期的动态网页技术(如ASP)出现之后,Web服务器职责开始变得复杂起来,它不仅仅要完成原先的传送网页的工作,还需要完成在传送网页之前动态生成网页的工作。这时,动态网页多采用脚本语言比如VBScript/JScript等配合HTML来开发。

脚本语言与标准的面向对象语言相比,一般在语法上有所简化,在功能上也不如标准的面向对象语言强大,并且不支持面向对象的所有特性,同时往往也缺乏高效率的开发工具支持。

Java平台的动态网页技术JSP应用Serverlet技术突破了网页开发不能使用面向对象语言与工具的限制,网页是由在Web服务器运行的Serverlet动态生成的,而Serverlet本身则使用全面向对象的Java语言开发。

在JSP出现并得到广泛应用不久之后,微软公司于2002年推出了ASP技术的替代技术——ASP.NET,在面向对象的道路上走得更远。

ASP.NET将网页本身看成是一个类,当浏览器向Web服务器请求这个网页时,Web服务器动态创建这个类的一个对象,然后调用它的特定方法生成HTML代码,再将生成的这些HTML代码发回给浏览器。

在开发ASP.NET网页时,开发者可以使用C#/VB.NET等面向对象的语言,并以与桌面程序一致的“所见即所得”与“事件驱动”开发方式编程。对比老的ASP技术,ASP.NET技术的这些新特点,充分说明了微软Web开发技术已全面步入面向对象的时代。

由于ASP.NET技术是全面向对象的,因此,要想掌握这一技术,必须具备有扎实的面向对象理论基础。

时间: 2024-10-19 10:15:21

一、面向对象技术概论(下)的相关文章

面向对象技术概论

面向对象理论很早就被提出了,但它真正地渗透到软件开发的各个领域,并且在软件开发实践中大规模应用,却要等到上世纪九十年代.到目前为止,面向对象技术已是软件开发的主流,全面取代了结构化编程技术曾经具有的地位. 面向对象技术与结构化编程技术有着不同的风格,但同时也有着密切的联系.从具体编程角度来看,面向对象技术与结构化编程技术很难截然分开,两者的根本差别在于思维 方式. 要了解面向对象技术,得从结构化编程技术入手. 1.1结构化编程引例 结构化编程在上世纪七十年代兴起,由于它具有很多的优点,出现之后没

一、面向对象技术概论(上)

面向对象理论很早就被提出了,但它真正地渗透到软件开发的各个领域,并且在软件开发实践中大规模应用,却要等到上世纪九十年代.到目前为止,面向对象技术已是软件开发的主流,全面取代了结构化编程技术曾经具有的地位. 面向对象技术与结构化编程技术有着不同的风格,但同时也有着密切的联系.从具体编程角度来看,面向对象技术与结构化编程技术很难截然分开,两者的根本差别在于思维方式. 要了解面向对象技术,得从结构化编程技术入手. 1.1.结构化编程引例  结构化编程在上世纪七十年代兴起,由于它具有很多的优点,出现之后

【菜鸟也疯狂UML系列】——面向对象技术

从软工开始,我们就开始接触面向对象了,接下来的学习资料好像都有提到面向对象,以后就要和她交朋友了,所以,我们就要对她了解多一点点. 一.何为面向对象? 面向对象(Object Oriented),是将现实世界映射成的一个个独立的对象,这些对象之间原本没有关系,只是加上一点魔术粉,她们就会相互传递消息,从而形成一个"过程".举个比较生动的例子:我韩梦甜,和刘文彬原本是两个八竿子打不着的人(一个南方,一个北方),可是在书法协会这个外力的作用下,我们相识相知相爱,传达爱意,从而形成了一个&q

面向对象技术的软件设计

面向对象技术(Object-Oriented Technology).面向对象技术强调在软件开发过程中面向客观世界或问题域中的事物,采用人类在认识客观世界的过程中普遍运用的思维方法,直观.自然地描述客观世界中的有关事物.面向对象技术的基本特征主要有抽象性.封装性.继承性和多态性. 对象模型化技术(OMT) 对象模型化技术把分析时收集的信息构造在三类模型中,即对象模型,功能模型和动态模型 对象模型:最关键的模型,描述系统的静态结构,包括构成系统的类和对象,以及他们之间的关系 在对象模型化技术中,类

PHP面向对象技术(全面讲解)

PHP面向对象技术(全面讲解) 本部分一共包括以下一些技术点: 1.面象对象的概念 2.什么是类, 什么是对象, 类和对象这间的关系 3.什么是面向对象编程呢? 4.如何抽象出一个类? 5.如何实例化对象 6.如何去使用对象中的成员 7.特殊的引用"$this"的使用 8.构造方法与析构方法 9.封装性 10.__set() __get() __isset() __unset()四个方法的应用 11.类的继函 13.重载新的方法 14.访问类型 15.静态成员以及类中常量的使用 16.

OS X 和iOS 中的多线程技术(下)

OS X 和iOS 中的多线程技术(下) 上篇文章中介绍了 pthread 和 NSThread 两种多线程的方式,本文将继续介绍 GCD 和 NSOperation 这两种方式.. 1.GCD 1.1 什么是GCD GCD 全称 Grand Central Dispatch,可译为"牛逼的中枢调度器" GCD 基于纯 C 语言,内部封装了强大的函数库 1.2 使用 GCD 有什么优势 GCD 是苹果公司为多核的并行运算提出的解决方案 GCD 会自动利用更多的CPU内核 (如 二核 ,

20140213-面向对象技术概论

到目前为止,面向对象已经是软件开发的主流. 面向对象技术拥有四大基本特性:封装.抽象.继承.多态 1)封装,是一种隐藏信息的特性,通俗的说就是:包起外界不必需要知道的东西,只展示外界需要知道的东西.方便类的算法的更新更换,以及降低对其他使用类的外部代码的影响.     封装的类=数据+对此数据所进行的操作(算法,函数) 2)抽象,在使用面向对象的方法设计一个软件系统时,首先就要区分出现实世界中的食物所属的类型,分析他们拥有那些性质与功能,再将他们抽象为在计算机的虚拟世界中才有意义的实体--类,在

面向对象技术

c#是面向对象的编程技术,所以要了解面向对象的知识十分重要.要编写出结构合理的c#代码语句,必须掌握面向对象编程技术的基本知识. 什么是OOP? 面向对象程序设计即OOP,是Object-OrientedProgramming的缩写.与函数式程序设计和逻辑是程序设计所代表的接近于机器的实际计算模型所不同的是,OPP几乎没有引入精确的数学描述,而是倾向于建立一个对象模型,它能够反映实体之间的联系. 对象的产生基于两种方式:原型,类. 面向对象技术具体分为面向对象分析(OOA)和面向对象设计(OOD

软工视频(27~32)-面向对象技术

这次主要说面向对象技术,面向对象,在之前就已经接触过,那么这里我来比对着学习一下. 大道至简,其实面向对象讲来讲去就这两样东西,一是它是什么,二就是它是怎么来的. 一.先说它是什么吧,也就是他的概念.这里我想先回忆一下之前学到的这些东西.首先是VB,它主要是面向过程,面向对象的东西并不多.C++呢,面向对象这一块还是非常重要的,不管是学习还是考试,这都是一个重点.基本上一提到面向对象,那就是对象.类.继承.多态.封装.再来看看我们软工中说到的面向对象: 面向对象=对象+类+继承+通信. 在说这个