精华内容
下载资源
问答
  • 面向对象

    千次阅读 多人点赞 2018-02-14 20:02:53
    面向对象面向对象是相对于面向过程来说的,面向过程是一种以“过程”为中心的编程思想,分析出解决问题所需的步骤,然后用函数把这些步骤一步步的实现,使用的时候一个个依次调用就好。而面向对象,是一种以“对象...

    面向对象:面向对象是相对于面向过程来说的,面向过程是一种以“过程”为中心的编程思想,分析出解决问题所需的步骤,然后用函数把这些步骤一步步的实现,使用的时候一个个依次调用就好。而面向对象,是一种以“对象”为中心的编程思想,把问题看成一个个对象,通过对象的属性和行为,将问题解决的。面向过程强调的是模块化,而面向对象强调的是把事物对象化。

    复杂来说面向对象是以“对象”为基本单元构建系统,对象是把数据和数据操作方法放在一起,作为一个相互依存的整体。把同类的对象抽象出其共性,形成类。所以说类是对象的抽象,对象是类具体化的体现(类是大范围的,一个类可以有多个对象),类中的大多数数据只能通过本类的方法实现,类包含说明和实现,说明部分被外界所看到,通过简单的外部接口与外界进行联系;实现部分不被外界所看到,在内部通过不同方法的构建,实现不同的功能。对象与对象之间通过消息进行沟通,程序流程由用户在使用中决定。

    面向对象用以解决越来越复杂的需求,提高了软件的重用性,灵活性和拓展性。

    展开全文
  • 谈:面向对象的软件测试与传统测试的比较[2]软件测试对认定的对象的测试对认定的结构的测试对认定的主题的测试对定义的属性和实例关联的测试对定义的服务和消息关联的测试3、面向对象设计的测试通常的结构化的设计...
  • 什么是面向对象方法?面向对象的基本原则主要有哪些? 面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态 性等概念来构造系统的软件开发方法
  • 早期方法的不足: 早期的方法只使用一种系统的视角作为构造块,而没有容纳其他视角。 1、结构化分析和设计方法集中于将功能作为系统的构造块...为了克服传统开发方法的不足,面向对象方法解决问题的思路 是从现实世...
    早期方法的不足:
    早期的方法只使用一种系统的视角作为构造块,而没有容纳其他视角。
    1、结构化分析和设计方法集中于将功能作为系统的构造块。
    2、在信息建模方法中(实体关系模型)构造块是实体,但在该方法中用来满足系统需求的功能被完全忽略掉了。
    两种方法都没有处理对动态行为的捕获,声明性语义(规则)以及例外处理机制都被完全忽略了。
    为了克服传统开发方法的不足,面向对象方法解决问题的思路
    是从现实世界中的客观对象(如人和事物)入手,尽量运用人类的自然思维方式
    (抽象、分类、继承、聚合、封装、关联等)来构造软件系统
    这与传统的结构化方法从功能入手和建模方法从信息入手是不一样的
    在面向对象方法中,把一切都看成是对象
    以图书管理信息系统为例来比较结构化开发方法和面向对象方法的思路

    可见,面向对象不仅是一些具体的软件开发技术与策略,而且是一整套关于如何看待软件系统与现实世界的关系、用什么观点来研究问题并进行问题求解、以及如何进行系统构造的软件方法学。
    
    Coad和Yourdon给出了一个定义:
    “面向对象=对象+类+继承+通信”。
    
    如果一个软件系统是使用这样 4 个概念设计和实现的,则我们认为这个软件系统是面向对象的。
    一个面向对象的程序的每一成份应是对象,计算是通过新的对象的建立和对象之间的通信来执行的。
    
    面向对象基本思想:
    
    面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。
    
    
    1、从现实世界中客观存在的事物出发来构建软件系统,强调直接以问题域(现实世界)中的事物为中心来思考问题、认识问题,并根据这些事物的本质特征和要解决的具体问题域语境,把它们抽象地表示为软件系统中的对象,作为软件系统的基本构成单位。 
    (对象(object)) 
    
    2、用对象的属性表示事物的静态特征;用对象的服务(操作)表示事物的动态特征
    (属性(attribute)与服务(operation))
    
    3、对象的属性与服务结合为一体,成为一个独立的、不可分的实体,对外屏蔽其内部细节。
    (对象的封装(encapsulation))
    
    4、对事物进行分类。把具有相同属性和服务的对象归为一类,类是这些对象的抽象描述,每个对象是它的类的一个实例。
    (分类(classification))
    
    5、类具有封闭性,把内部的属性和服务隐藏起来,只有公共的服务对外是可见的。
    (类的封闭性)
    
    6、复杂的对象可以用简单的对象作为其构成部分。
    (聚合(aggregation))
    
    7、通过在不同程度上运用抽象的原则,可以得到较一般的类和较特殊的类。特殊类继承一般类的属性与服务,从而简化系统的构造过程及文档。
    (继承(inheritance))
    
    8、通过关联表达类之间的静态关系
    (关联(association))
    
    9、对象之间通过消息进行通信,以实现对象之间的动态联系。
    (消息(message))
    

     

    面向对象的主要概念:
    对象
    类
    关联和链
    继承/泛化
    聚合
    
    对象和类:
    
    对象是现实世界中某个实际存在的事物
    它可以是有形的(比如一辆汽车),也可以是无形的(比如一项计划)
    对象是构成世界的一个独立单位
    它具有自己的静态特征和动态特征
    
    对象:对象标识+属性+操作
    对象是系统中用来描述客观事物的一个实体,它是构成系统的一个基本单位
    一个对象由一组属性和对这组属性进行操作的一组操作构成
    
    属性是用来描述对象状态特征的一个数据项
    操作(服务)是用来描述对象动态特征的一个操作序列
    对象标识就是对象的名字
    
    类是具有相同属性、操作、关系和语义的对象集合的描述
    类为属于该类的全部对象提供了统一的抽象描述,由类名、属性和服务三个主要部分组成
    
    对象是类的实例

    关联用来描述类之间的静态联系,可以包含关联的名称、关联的方向和多重性等属性
    
    如下所示:
    关联名称:借阅
    关联方向:单向
    多重性:7(表示最多借阅7本)
    

    链是关联的实例,用于描述具体对象之间的某种联系
    
    对象之间的链可以通过对象的属性表达出来
    例如,用类“学生”的对象的属性来记录该对象具体借阅的“图书”对象 
    
    继承也称泛化,是面向对象描述类之间相似性的一种重要机制
    
    在类的继承层次结构中,位于较高层次的类叫做一般类/超类/父类,而位于较低层次的类叫做特殊类/子类
    
    继承使得特殊类自动地拥有或隐含地复制一般类的全部属性、操作和关联,根据需要添加自己的属性和方法
    
    继承简化了人们对事物的认识和描述,非常有益于软件复用,是OO技术提高软件开发效率的重要原因之一
    

    需要注意的是,只有当两个类之间是 “is a”, “is like” 或 “is a kind of ”关系时,才可以使用继承
    
    由于“学生” “is a” “人”, “教授” “is a” “人”,因此“学生”可以继承“人”、“教授”可以继承“人”
    继承可分为单继承和多继承。
    如果一个子类继承了超过一个以上的父类的属性和操作,那么这种继承就是多继承,否则就是单继承。
    
    继承是可传递的,可以跨越任意层次。
    
    子类继承其所有祖先类的属性、操作和关联。  
    

    聚合刻画了现实世界事物的构成关系 ,是一种具有整体--部分语义的关联
    也就是说,聚合是关联的一种,只是普通关联的语义没有聚合那么强 
    
    举例,车是一个整体实体,轮胎、发动机、车身、车座等是整辆车的一部分
    
    基本原则:
    
    分类
    封装和信息隐藏
    消息通信
    多态性
    
    分类是按照某种原则划分事物的类别,利用它有助于对复杂世界的认识
    
    在面向对象的方法中,分类就是把具有相同属性和操作的对象划分为一类,用类作为这些对象的抽象描述 
    
    运用分类原则,可以清楚地表示对象和类之间的关系以及特殊类和一般类之间的关系
    
    封装是指将属于对象的各种信息(属性)和对象的行为(操作)组织起来,形成一个实体――对象
    
    接口:定义外部实体能对对象进行的操作方式;
    

    信息隐藏有两方面含义:
    
    1、对象属性只有通过对象对外发布的接口访问;
    2、外部对象只关心接口的访问方法,不关心接口的内部实现;
    
    降低软件复杂性,让其他对象不用关心它们不必关心的细节;
    
    减少修改对象引起的“波动效应”:对象内部的修改对外部的影响很小,只要接口不变,里面怎么变都没有关系;
    
    实现接口和实现的分离。 
    
    消息是对象间实现通信的手段
    
    操作是对象与外界的接口,当系统中的其他对象或其他系统成分请求这个对象执行某个操作时,该对象就响应这个请求,执行该操作的实现。在面向对象系统中,把向对象发出的操作请求称为消息
     
    消息必须发给特定的对象
    
    一条消息应包括:消息名、入口参数和返回参数。对象接收到消息后先分析消息的合法性,然后为请求者提供服务
    
    一个对象可以是消息的发送者,也可以是消息的接收者,还可以作为消息中的参数
    
    多态性(polymorphism)指在不同的类中可以定义相同的操作,而这些操作在这些类中可以有不同的实现
    
    多态性也是一种特性,这种特性使得一个属性或变量在不同时期可以表示不同类型的对象。
    从而增加了代码的灵活性和扩展性。  
    

    多态性的意义:
    
    使得多个从相同的父类中衍生出来的类可被当作同一种类型对待。
    在代码中,让原本引用父类对象的对象变量去引用多个子类对象,只让自己的代码与父类对象打交道,从而简化设计、使设计灵活。 
    
    设有一个类Instrument,在该类中定义了一个操作play
    类Wind、Percussion、Stringed和Brass继承类Instrument而成为该类的子类
    不同的子类对play操作都有不同的实现
    现在,需要写一段代码,分别创建上述4个子类的对象,并让这些对象执行play操作。 
    
    public class Music {
    	// 不用关心数组元素具体是绑定到哪种对象
    	static void tuneAll(Instrument[] e) {
    		for(int i = 0; i < e.length(); i++)
    			e[i].play();
    	}
    	public static void main(String[] args) {
    		Instrument[] orchestra = new Instrument[4]; 
    		int i = 0;
    		// 将子类对象的引用赋值给引用父类对象的变量
    		orchestra[i++] = new Wind();
    		orchestra[i++] = new Percussion();
    		orchestra[i++] = new Stringed();
    		orchestra[i++] = new Brass();
    		tuneAll(orchestra);
    	}
    } //
    
    
    几种经典的面向对象的分析和设计方法:
    OOA/OOD
    Booch方法
    对象建模技术(OMT)
    面向对象软件工程方法(OOSE )
    
    OOA(Object-Oriented Analysis)/OOD(Object-Oriented Design)方法
    
    由Peter Coad和Ed Yourdon在1991年提出的
    
    这是一种逐步进阶的面向对象建模方法,其特点是概念清晰,简单易学
    
    OOA使用了基本的结构化原则,结合了面向对象的观点
    
    包括下面五个步骤:确定类与对象、标识结构、定义主题、定义属性、定义服务
    

     

    OOA:
    
    确定类与对象主要是描述如何找到类和对象。
    从应用系统需求出发,以整个应用为基础标识类与对象,然后按这些类与对象分析系统的职责。 
    
    标识结构按照两种不同的原则进行:
    第一种是按照一般化/特殊化结构,确定已标识出的类之间的继承层次关系。
    第二种是按照整体/部分关系,来确定一个对象怎样由其它对象组成,以及对象怎样组合成更大的复杂对象。 
    
    标识主题是通过把类与对象划分成更大的单元来完成的。
    主题是一组类与对象。
    主题的大小应合适地选择,使得人们可以从模型很好地理解系统。
    
    标识属性是通过标识与类有关的信息和关联来完成的。
    对每个类,只需要标识刻画必需的属性就可以了
    。标识好的属性应放在合适的继承层次上。
    关联也要通过检查问题域上的关系标识出来。
    
    定义服务就是定义类上的操作。
    主要是通过定义对象状态,以及定义诸如创建、访问、连接、计算、监控等服务来完成。
    

     

    OOD:
    (1)设计问题域部分(细化分析结果)
    问题域部分实际上是OOA工作的进一步延伸,在OOA工作基础上进行。 
    
    (2)设计人机交互部分(设计用户界面)
    突出人如何使用系统,以及系统如何向用户提交信息。
    
    (3)设计任务管理部分(确定系统资源的分配)
    任务是进程的别名,任务管理部分用来管理任务的运行、交互等。任务管理部分可设计如下的策略:识别事件驱动任务;识别时钟驱动任务;识别优先任务和关键任务;识别协调者;定义每一个任务。
    
    (4)设计数据管理部分(确定持久对象的存储)
    这部分的设计既包括数据存放方法的设计(采用关系型数据库还是面向对象数据库),又包括相应服务的设计(设计哪些类来实现数据的持久化服务,它们需要包含哪些属性和操作)。

     

    Booch方法:
    Booch方法是Grady Booch从1983年开始研究,1991年后走向成熟的一种方法。 
    Booch方法强调多次重复和开发者的创造性,包含一组启发性的过程式建议,般过程如下:
    (1)在一定抽象层次上标识类与对象。
    (2)标识类与对象的语义。
    (3)标识类与对象之间的关系。
    (4)实现类与对象。   
    
    Booch方法使用四个主图和两个辅图来描述系统各方面的联系:
    四个主图:
    类图描述类之间的关系;
    对象图描述具体的对象和在对象之间传递的消息;
    模块图用来描述这些程序构件;
    进程图描述过程(进程)如何被分配给特定的处理器。
    两个辅图:
    状态转换图:用于描述某个类的状态空间和状态变化;
    时序图:描述不同对象间的动态交互。
    
    对象建模技术(OMT):
    
    OMT(Objcct Modeling Technique)最早是由Loomis,Shan和Rumbaugh在1987年提出的 ,J. Rumbaugh在1991年正式把OMT应用于面向对象的分析和设计。
    
    这个方法是在实体关系模型上扩展了类、继承和行为而得到的。
    
    OMT包括了一组定义得很好的并且相互关联的概念
    类(class)、对象(object)、泛化(generalization)、继承(inheritance)、链(1ink)、链属性(link attribute)、聚合(aggregation)、操作(operation)、事件(event)、场景(scenario)、属性(attribute)、子系统(subsystem)、模块(module)等。  
    
    OMT的三种模型:
    对象模型,用类和关系来刻画系统的静态结构。
    动态模型,用事件和对象状态来刻画系统的动态特性。
    功能模型,按照对象的操作来描述如何从输入给出输出结果。
    
    OMT包含四个步骤 :
    分析的目的是建立可理解的现实世界模型。分析模型由上述三种模型组成。初始的需求用问题陈述来表达。 
    系统设计确定高层次的开发策略。系统被划分成子系统,并分配到处理器和任务。 
    对象设计的目标是确定对象的细节,包括定义对象的操作和算法。 
    实现对象。实现是在良好的面向对象编程风格和编码原则指导下进行的。 

     

    面向对象软件工程方法(OOSE):
    面向对象软件工程(OOSE)是由Ivar Jacobson提出的,他将面向对象的思想贯穿到软件工程中,目的是为了得到一个能适应变化的、健壮的、可维护的系统。
    
    OOSE采用五个模型来完成其实现目标系统的过程:
    
    (1)需求模型(RM)。
    从用户的观点出发完整地刻画了系统的功能需求 ,主要建模手段有用例(Use Case)、问题域对象模型、以及人与系统的交互界面。 
    
    (2)分析模型(AM)。
    主要目的是要建立健壮的、可扩展的系统的基本结构。
     OOSE定义了三种对象类型:
    实体对象刻画系统要长期管理的信息和信息上的行为。
    界面对象刻画系统界面,使用户和系统能进行双向通信。
    控制对象本身不完成任何功能,只是向其他对象委托职责,负责协调其他对象的工作。
    通过将RM中的对象分别识别到AM中的不同对象类型并分析对象间的关系实现分析模型。 
    
    (3)设计模型(DM)。当进入设计阶段后,就需要考虑真实运行环境,这时对于系统的逻辑的修改不会太大, DM最终表现为一个个类(对象)模块,并且这些类(对象)有了详细定义。
    
    (4)实现模型(IM)。就是用某种程序设计语言(最好是支持面向对象)来实现DM。
    
    (5)测试模型(TM)。关于类(对象)的底层测试(如类方法和类间通讯等的测试)可由程序员完成,但集成测试应该由独立于开发组的测试人员完成。 
     
    

     

    展开全文
  • 面向对象知识点整理

    千次阅读 2016-12-07 22:37:00
    从程序设计方法的角度看,面向对象是一种新的程序设计范型(paradigm),其基本思想是使用对象、类、继承、封装、聚合、关联、消息、多态性等基本概念来进行程序设计。 面向对象方法是一种运用对象、类、继承、封装、...

    面向对象考试简述题整理

    概述

    1、  什么是面向对象?

    从程序设计方法的角度看,面向对象是一种新的程序设计范型(paradigm),其基本思想是使用对象、类、继承、封装、聚合、关联、消息、多态性等基本概念来进行程序设计。

    面向对象方法是一种运用对象、类、继承、封装、聚合、关联、消息、多态性等概念来构造系统的软件开发方法。

    2、 面向对象基本思想。

    从现实世界中客观存在的事物出发来建立软件系统

    充分运用人类日常的思维方法

    对问题空间进行自然分割,以更接近人类思维的方式建立问题域模型,以便对客观实体进行结构模拟和行为模拟,从而使设计出的软件尽可能直接地描述现实世界。

    构造出模块化的、可重用的、维护性好的软件,同时限制软件的复杂性和降低开发维护费用。

    3、面向对象主要特点

    用类和对象作为系统的基本构成单位。对象对应问题域中的事物,其属性与服务刻画了事物的静态特征和动态特征,它们之间的继承关系、聚合关系、消息和关联如实地表达了问题域中事物之间实际存在的各种关系。

    因此,无论系统的构成成分,还是通过这些成分之间的关系而体现的系统结构,都可直接地映射问题域。

    第一章面向对象思想

    1、对象是独立存在的客观事物,它由一组属性和一组操作构成。属性和操作是对象的两大要素。属性是对象静态特征的描述,操作是对象动态特征的描述。

    2、部分/整体关系中有两种方式:组合聚合

    3、█组合与聚合的区别

    组合关系中部分和整体的关系很紧密。聚合关系中则比较松散,一个部分对象可以属于几个整体对象。

    4、消息和方法

    在面向对象编程中,行为的启动是通过将“消息”传递给对此行为负责的代理(对象)来完成的。消息对行为的要求进行编码,并且随着执行要求所需的附加信息(参数)来一起传递。“接收器”就是消息发送的对象。如果接收器接受了消息,那么同时它也接受了消息所包含的行为责任。然后,接受器响应消息,执行相应的“方法”以实现要求。

    5、消息传递与过程调用

    每一条消息都有一个指定的接收器相对应;接收器就是消息发送的对象。过程调用没有指定的接收器。

    消息的解释由接收器决定,并且随着接收器的不同而不同。

    动态绑定。

    6、信息隐藏

    作为某对象提供的服务的一个用户,只需要知道对象将接受的消息的名字。

    不需要知道怎么完成要求,需要执行哪些动作。

    在接收到一条消息后,对象会负责将该项任务完成。

    7、责任

    用责任来描述行为。A对行为的要求仅表明他所期望的结果,C可随意选择使用的方法来实现所期待的目标,并在此过程中不受A的干扰。

    提高了抽象水平,对象更加独立。

    8、不干预原则

    允许对象以任何它认为合适的不干涉其他对象的方式来完成任务,而不要干预它

    9、类

    根据抽象的原则对客观事物进行归纳和划分,只关注与当前目标相关的特征,把具有相同特征的事物归为一个类。它是一个抽象的概念。类是具有相同属性和相同操作(服务)的对象的集合。它包括属性和操作。

    10、类和实例

    所有对象都是类的实例。

    在响应消息时调用何种方法由类的接收器来决定。

    一个特定类的所有对象使用相同的方法来响应类似的消息。

    每一个对象都是某个类的实例。类是一组相似的对象 。

    类是对象相关行为的储存库(repository)。即同一个类的所有对象都能执行同样的动作。

    11、改写

    将子类中某一方法取与父类方法相同的名称,结合寻找方法的规则(当响应特定消息时)实现改写。

    12、方法绑定与改写

    接收器搜索并执行相应的方法以响应给定的消息。

    如果没有找到匹配的方法,搜索就会传导到此类的父类。搜索会在父类链上一直进行下去,直到找到匹配的方法,或者父类链结束。

    如果能在更高类层次找到相同名称的方法,所执行的方法就称为改写了继承的行为。

    13、多态

    多态性是指一般类中定义的属性和服务,在特殊类中不改变其名字,但通过各自不同的实现后,可以具有不同的数据类型或具有不同的行为。如不同花商送花方式。

    多态可通过重载和类等级不同层次共享同一方法名字等方式来实现。

    14、JAVA中的重写/改写和重载

    重写一般是指父类和子类之间,子类重写了父类的一个方法,当然方法名是一样的,而且不能改变父类方法的返回值,比如说父类是返回String,子类重写了这个方法,想返回一个int,那是不行的,也得返回String。

    重载是一个类里面,写了多了同名的方法,各个方法的返回值类型可以不一样。区分重载方法可以通过参数列表的个数,类型和顺序。

    第二章抽象

    1、抽象

    抽象是指对于一个过程或者一件制品的某些细节有目的的隐藏,以便把其他方面、细节或者结构表达得更加清楚。(信息隐藏) 抽象,是控制复杂性时最重要的工具。

    第四章类和方法

    1、什么是封装

    避免重复的代码

    保护类受到不必要的修改

    2、接口

    不提供实现

    接口定义新类型,可以声明变量

    类的实例可以赋值给接口类型变量

    3、向前定义

    多个互相引用的类(相互递归)

    Java全文扫描。C++向前定义

    Java 语言在生成代码之前会扫描整个文件,这样,如果程序文件的前面部分引用在文件后面声明的类,就不会产生任何冲突。其他的语言,例如 C++,会从前到后地依次处理程序文件中的类和方法去。名称在使用之前必须至少进行部分定义

    4、静态成员函数

    成员函数。不能访问非静态成员。

    无this

    构造和析构函数不能为静态成员。

    第五章消息、实例和初始化

    1、消息

    使用消息传递(message passing)这一术语来表示请求对象执行一项特定行为的动态过程

    消息总是传递给某个称为接收器的对象

    响应消息所执行的行为不是固定不变的,它们根据接收器类的不同而不同

    广播,可响应可不响应

    对象间相互请求或相互协作的途径。

    2、消息传递语法

    任何消息传递表达式都有 3 个确定的部分,包括接收器(receiver,消息传递的目的对象)消息选择器(message  selector,表示待传递的特定的消息文本)和用于响应消息的参数(argument)。

    响应行为随接收器不同而不同。

    3、静态类型语言,动态类型语言

    静态:类型和变量联系在一起(Java,C++,C#,Pascal)

    动态:变量看作名称标识,类型和数值联系在一起。(SmatllTalk,Python)

    动态类型语言与静态类型语言之间的差异在于变量或数值是否具备类型这种特性。

    4、静态类型语言与动态类型语言在高效性与灵活性方面

    在消息传递这方面,静态类型语言和动态类型语言之间存在显著的差异。一方面,静态类型语言在编译时使用接收器的类型来检查选择器,以理解它所接收的消息。另一方面,动态类型语言在编译时则没有办法去核实这一消息。

    5、静态类性语言

    编译时作出内存分配决定。不必运行时刻重新分配。

    控制类型错误。

    PlayingCard aCard;   

     aCard.someFunction();

    6、动态类型语言

    Function max(a,b){

        if (a<b)

            then returnb;

      return a;

    }

    7、伪变量

    大多数面向对象语言中,接收器并不出现在方法的参数列表中,而是隐藏于方法的定义之中。只有当必须从方法体内部去存取接收器的数值时,才会使用伪变量。

    Java,C++:this

    Eiffel:Current

    Smalltalk,object-c:self

    它不需要被声明,也不能被更改。

    8、对象自身引用

    this隐含指向调用成员函数的对象。

    9、Java:new仅创建数组。数组包含的对象必须独立创建。

    第八章继承和替换

    1、※扩展与简化

    继承在程序语言中的含义如下:子类所具有的数据和行为总是作为与其相关的父类的属性的扩展( extension) (即更大的集合)。子类具有父类的所有属性以及其他属性。另一方面,由于子类是父类的更加特殊(或受限制)的形式,在某种程度上,子类也是父类的收缩( contraction)。

    这种把继承作为一种扩展同时也作为一种收缩的思想,正是面向对象技术强大的原因,同时也会在正常的部署中引起混淆 。

    2、继承的作用

    代码复用

    概念复用。共享方法的定义。

    3、通过(is-a)检验规则检验两个概念是否为继承关系

    4、类中public和protected类型的成员,其子类能访问;父类中private类型的成员,其子类不能访问,只能自己类内部使用。

    5、在静态类型语言中父类和子类数据类型的关系?

    ①子类实例必须拥有父类的所有数据成员。

    ②子类的实例必须至少通过继承实现父类所定义的所有功能。

    这样,在某种条件下,如果用子类实例来替换父类实例,那么将会发现子类实例可以完全模拟父类的行为,二者毫无差异。

    6、█替换原则

    指如果类B是类A的子类,那么在任何情况下都可以用类B来替换类A,而外界毫无察觉。

    7、子类型*

    指符合替换原则的子类关系。

    区别于一般的可能不符合替换原则的子类关系

    8、改写

    子类有时为了避免继承父类的行为,需要对其进行改写

    语法上:子类定义一个与父类有着相同名称且类型签名相同的方法。

    运行时:变量声明为一个类,它所包含的值来自于子类,与给定消息相对应的方法同时出现于父类和子类。

    改写与替换结合时,想要执行的一般都是子类的方法。

    9、接口

    Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能)。与类一样,接口可以继承于其他接口,甚至可以继承于多个父接口。虽然继承类和实现接口并不完全相同,但他们非常相似,因此使用继承这一术语来描述这两种行为。

    第十章静态行为和动态行为

    1、静态类和动态类

    变量的静态类是指用于声明变量的类。静态类在编译时就确定下来,并且再也不会改变。

    变量的动态类指与变量所表示的当前数值相关的类。动态类在程序的执行过程中,当对变量赋新值时可以改变。

    对于静态类型面向对象编程语言,在编译时消息传递表达式的合法性不是基于接收器的当前动态数值,而是基于接收器的静态类来决定的

    2、向下造型(反多态)

    做出数值是否属于指定类的决定之后,通常下一步就是将这一数值的类型由父类转换为子类。这一过程称为向下造型,或者反多态,因为这一操作所产生的效果恰好与多态赋值的效果相反。

    3、方法绑定

    响应消息时对哪个方法进行绑定是由接收器当前所包含的动态数值来决定的。

    4、多态变量

    如果方法所执行的消息绑定是由最近赋值给变量的数值的类型来决定的,那么就称这个变量是多态的。Java,Smalltalk等变量都是多态的。

    第十四章多态及软件复用

    1、※多态的形式

    重载:(也称为专用多态(ad  hoc polymorphism))用于描述一个函数名称(或者方法名称)有多种不同实现方式的情况。通常可以在编译时基于类型签名来区分各个重载函数的名称。

    改写:(或者包含多态(inclusionpolymorphism))是重载的一种特殊情况。只发生在有关父类与子类之间关系的上下文中。改写方法具有相同名称、相同的类型签名

    多态变量(polymorphic  variable):(或者赋值多态(assignment polymorphism))是指声明为一种类型,但实际上却可以包含另一种类型数值的变量。当多态变量用作参数时建立的函数将展现纯多态(pure polymorphism)。//声明与包含不同。

    泛型(或模板)提供了一种创建通用工具的方法,可以在特定的场合将其特化。

    2、最常用的软件复用机制:继承和组合。

    3、组合

    提供了一种利用已存在的软件组件来创建新的应用程序的方法。

    对象是数据(数据值)和行为的封装。在通过使用组合复用已存在的数据抽象来创建新数据类型时,新数据结构的部分状态只是已存在的数据结构的一个实例。

    4、█组合与继承的比较

    组合是较为简单的一种技术。优点是清楚地指示出在特定的数据结构中需要执行哪些操作。无需考虑列表类所定义的所有操作。

    继承无法知道一个方法是否可以合法地应用于集合。

    使用继承构建数据抽象的代码的简洁性是继承的一个优点

    继承无法防止用户使用父类的方法来操纵新的数据结构:FirstElement

    第十五章重载

    1、重载是在编译时执行的,而改写是在运行时选择的。

    2、多个过程(或函数、方法)允许共享同一名称,且通过该过程所需的参数数目、顺序和类型来对它们进行区分。即使函数处于同一上下文,这也是合法的。

    3、关于重载的解析,是在编译时基于参数值的静态类型完成的。不涉及运行时机制。

    4、造型:自动类型转换和强制类型转换

    自动类型转换是一种隐式的类型转换,它发生在无需显式引用的程序中。强制类型转换表示程序员所进行的显式类型转换。

    5、x是y的父类  

    上溯造型  

    X a=new X();

    Y b=new Y();

    a=b;  //将子类对象造型成父类对象,相当做了个隐式造型:a = (X)b;

    下溯造型

    X a=new X();

    Y b=new Y();

    X a1=b;

    Y b1=(Y)a1 ;

    6、作为转换的替换

    类型转换:“类型的改变”,替换原则将引入一种传统语言所不存在的另外一种形式的类型转换。

    发生在类型为子类的数值作为实参用于使用父类类型定义对应的形参的方法中时。

    7、█匹配原则

    找到所有可能进行调用的方法,即各个参数可以合法地赋值给各个参数类型的所有方法。如果找到一个在调用时可以完全匹配所使用的参数类型的方法,那么就执行这个方法。

    如果第一步所产生的集合中,某个方法的所有参数类型都可以赋值给集合中的另一个方法的所有参数类型,那么就将第二个方法从集合中移走。重复以上操作,直至无法实现进一步的缩减为止。

    如果只剩下一个方法,那么这个方法就非常明确了,调用这个方法即可。如果剩余的方法不止一个,那么调用就产生歧义了,此时编译器将报告错误。

    第十六章改写

    1、如果子类的方法具有与父类的方法相同的名称和类型签名,称子类的方法改写了父类的方法。

    2、改写可看成是重载的一种特殊情况。

    由于重载也涉及一个方法名称和两个或更多个方法体

    3、█改写和重载的差异

    ①对于改写来说,方法所在的类之间必须符合父类/子类继承关系,而对于简单的重载来说,并无此要求。

    ②如果发生改写,两个方法的类型签名必须匹配。

    ③重载方法总是独立的,而对于改写的两个方法,有时会结合起来一起实现某种行为。

    ④重载通常是在编译时解析的,而改写则是一种运行时机制。对于任何给定的消息,都无法预言将会执行何种行为,而只有到程序实际运行的时候才能对其进行确定。

    4、改写并不能改变方法的可存取性。

    如果一个方法在父类中为public,那么不允许在子类中将该方法声明为private。反之亦然。

    5、█代替与改进——两种不同的关于改写的解释方式

    代替(replacement):在程序执行时,实现代替的方法完全覆盖父类的方法。即,当操作子类实例时,父类的代码完全不会执行。

    改进(refinement):实现改进的方法将继承自父类的方法的执行作为其行为的一部分。这样父类的行为得以保留且扩充。

    这两种形式的改写都很有用,并且经常在一种编程语言内同时出现

    如:几乎所有的语言在构造函数中都使用改进语义。即,子类构造函数总是调用父类的构造函数,来保证父类的数据字段和子类的数据字段都能够正确地初始化化。

    第十七章多态变量

    1、多态变量是指可以引用多种对象类型的变量。

    这种变量在程序执行过程可以包含不同类型的数值。

    对于动态类型语言,所有的变量都可能是多态的。

    对于静态类型语言,多态变量则是替换原则的具体表现。

    2、多态变量形式

    简单变量

    接收器变量

    纯多态(多态方法)

    3、多态变量在框架中的作用

    多态接收器功能的强大之处表现在消息传递与改写相结合时。这种结合是软件框架开发的关键。

    一般框架系统中的方法分为两大类:

    ①在父类中定义基础方法,被多个子类所继承,但不被改写;

    ②父类定义了关于多种活动的方法,但要延迟到子类才实现。

    4、接收器变量多态性的展现

    当执行基础方法时,接收器实际上保存的是一个子类实例的数值。

    当执行一个改写方法时,执行的是子类的方法,而不是父类的方法。

    第二十一章框架

    1、框架开发的一个重要基础是以完全不同的两种方式来使用继承—复用特化

    2、类的方法可以分为两大类

    基本方法:它定义于父类,通过继承但却不对其改写的方式成为子类的一部分。体现了对问题的现存的解决方案。代码复用。

    特化方法:为了适合于子类的特定环境,改变了其在父类中的行为。用于特定应用的解决方案。概念复用。

    面向对象的设计原则

    1、设计目标

    可扩展性(Extensibility):新功能易加入系统。

    灵活性(Flexibility):允许代码修改平稳发生,不会涉及很多其他模块。

    可插入性(Pluggability):容易将一个类换为另一个具有同样接口的类。

    2、软件复用重要性

    较高的生产率

    较高的软件质量

    恰当使用复用,可改善系统的可维护性

    3、抽象化和继承:使概念和定义可复用

    多态:使实现和应用可复用

    抽象化和封装:可保持和促进系统的可维护性

    4、面向对象设计中,可维护性复用是以设计原则和设计模式为基础的。

    5、面向对象设计原则

    开闭原则OCP:Open-ClosedPrinciple

    里氏替换原则LSP:LiskovSubstitution Principle

    依赖倒转原则DIP:DependencyInversion Principle

    接口隔离原则ISP:InterfaceSegregation Principle

    组合复用原则CRP:CompositoinResuse Principle

    迪米特法则LoD:Lawof Demeter

    单一职责原则(SRP)

    6、开闭原则

    软件组成实体应该是对扩展可扩展的,但是对修改是关闭的。

    7、依赖倒转原则

    抽象不应当依赖于细节,细节应当依赖于抽象。

    8、█使用接口的优点

    Client不必知道其使用对象的具体所属类。

    一个对象可以很容易地被(实现了相同接口的)的另一个对象所替换。

    对象间的连接不必硬绑定(hardwire)到一个具体类的对象上,因此增加了灵活性。

    松散耦合 (loosens coupling)。

    增加了重用的可能性。

    提高了(对象)组合的机率,因为被包含对象可以是任何实现了一个指定接口的类。

    9、组合复用原则

    组合优先原则:优先使用(对象)组合,而非(类)继承

    10、█组合的优点

    容器类仅能通过被包含对象的接口来对其进行访问。

    “黑盒”复用,因为被包含对象的内部细节对外是不可见。

    封装性好。

    实现上的相互依赖性比较小。

    每一个类只专注于一项任务。

    通过获取指向其它的具有相同类型的对象引用,可以在运行期间动态地定义(对象的)组合。

    11、█组合的缺点

    从而导致系统中的对象过多。

    为了能将多个不同的对象作为组合块(composition block)来使用,必须仔细地对接口进行定义。

    12、█继承的优点

    容易进行新的实现,因为其大多数可继承而来。

    易于修改或扩展那些被复用的实现。

    13、█继承缺点

    破坏了封装性,因为这会将父类的实现细节暴露给子类。

    “白盒”复用,因为父类的内部细节对于子类而言通常是可见的。

    当父类的实现更改时,子类也不得不会随之更改。

    从父类继承来的实现将不能在运行期间进行改变。

    展开全文
  • 第三章面向对象方法与统 一建模语言简介 主讲人李 向 目录 3.1 面向对象开发方法简介 3.2 统一...3.1.1 面向对象方法的由来与发展 3.1.2 面向对象的基本概念 定义一面向对象方法是一种运用对象类封装继 承多态和消息
  • 面向对象的一些概念及举例说明

    千次阅读 2015-10-06 20:51:50
    面向对象及相关概念:类、实例、消息、方法、属性、封装、继承、多态
    面向对象方法具有以下4个要点:
    

      (1)认为客观世界是由各种对象组成的,任何事物都是对象,复杂的对象以某种方式组合而成。即面向对象的方法用对象分解取代了传统方法的功能分解。

      (2)把所有对象都划分成各种对象类,每个对象类都定义了一组数据和方法。数据用于表示对象的静态属性,是对象的装填信息。

      (3)按照子类(或称为派生类)与父类(或成为基类)的关系,把若干个对象类组合成一个层次结构的系统。

      (4)对象彼此之间仅能通过传递消息互相联系,即封装性(黑盒子)。

      综上所述:只有同时使用对象、类、继承和消息的方法才是真正面向对象的方法,否则只能称之为基于对象的方法。

    对象的特点:

      (1)以数据为中心;(2)对象是主动地;(3)实现了数据封装;(4)本质上具有并行性;(5)模块独立性好。

    相关概念:

      (1)类:类是对具有相同属性和行为的一个或是多个对象的描述。

      (2)实例:由某个特定的类所描述的一个具体的对象,即对象是类的实例化。

      (3)消息:要求某个对象执行在定义它的那个类中所定义的某个操作的规格说明。 

      【通常,一个消息由三个部分组成:接收消息的对象、消息名、零个或多个变元。eg:MyCircle.Show(Green)】


      (4)方法:对象所能执行的操作,也就是类中所定义的服务。方法描述了对象执行操作的算法,响应消息的方法,在C++语言中将方法称为成员函数。

      【若是Circle类的对象能够响应让它在屏幕显示自己的消息Show(Green),那么在Circle类中必须给出成员函数Show(int Color)的定义,即给出成员函数的实现代码】

      (5)属性:指类中所定义的数据,它是对客观世界实体所具有的性质的抽象。类的每个实例都有自己的特有属性值。

      【例如Circle类中定义的代表圆心坐标、半径、颜色等数据成员就是圆的属性】

      (6)封装:把数据和实现操作的代码集中起来放在对象内部。即将对象看成是不透明的黑盒子,达到了信息隐蔽的目的,外人无法探知细节。

      (7)继承:子类从基类中直接获得已经定义的数据和方法的机制,不用重复定义,有效减少了程序的冗余信息。

      (8)多态:同样的消息在发送过程中,既可以发给父类对象,也可以发给子类对象,不分类等级。然而不同层次中的每个类按照各自的需要来实现这个行为(方法)。这样做能显著提高软件的可重用性和可扩充性。






    展开全文
  • 资源名称:面向对象程序设计—C 语言描述内容简介:第一章概述面向对象程序设计的若干重要概念,如类、抽象数据类型、对象、封装、客户/服务器模式、消息传递、继承、多态等,本章比较了面向对象方法与自顶向下的...
  • 面向对象程序设计中的消息传递实际是对现实世界中的信息传递的直接模拟。调用对象中的函数就是向该对象传送一个消息,要求该对象实现某一行为(功能)。对象所能实现的行为(功能),在程序设计方法中称为方法,它们是...
  • 面向对象程序设计概念

    千次阅读 2019-09-26 17:03:28
      面向对象程序设计(object-oriented programming,OOP)是一种新的程序设计的范型。程序设计范型是设计程序的规范、模型和风格,它是一类程序设计语言的基础。 面向对象设计范型的主要特征是:  程序=对象+...
  • 这种范型的主要特征是: 程序=对象+消息 面向对象程序的基本元素是对象 主要结构特点是 第一 程序一般由类的定义和类的使用两部分组成 第二 程序中的一切操作都是通过向对象发送消息来实现的 1.2 什么是对象?...
  • 这种范型的主要特征是 : 程序=对象+消息 面向对象程序的基本元素是对象 主要结构特点是 第一 程序一般由类的定义和类的使用两部分组成 第二 程序中的一切操作都是通过向对象发送消息来实现的 什么是对象 ?...
  • 【Java面向对象学习】一张图搞定Java面向对象

    千次阅读 多人点赞 2017-09-13 07:56:41
    【Java面向对象学习】一张图搞定Java面向对象,分享一些归纳总结后的技术干货,一张图能搞定的事,绝对不长篇大论。 大家都知道,Java面向对象是Java的一个核心,也是初学者的一个难点,所以我们从这里开始,Let...
  • C++面向对象程序设计 面向对象编程

    万次阅读 多人点赞 2018-09-12 22:39:50
    1.1 面向过程的编程风格与面向对象的编程风格 C语言是面向过程语言,也称为命令型语言,面向过程通常采用自顶向下设计,问题复杂时不断运用自顶向下设计(即函数分解法)直到容易处理。自顶向下设计优点是直观有...
  • 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息。为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程进行更为深入的了解。...
  • 为了说明 JavaScript 是一门彻底的面向对象的语言,首先有必要从面向对象的概念着手 , 探讨一下面向对象中的几个概念: 一切事物皆对象 对象具有封装和继承特性 对象与对象之间使用消息通信,各自存在信息隐藏 以...
  • 这种范型的主要特征是 程序=对象+消息 面向对象程序的基本元素是对象 主要结构特点是 第一 程序一般由类的定义和类的使用两部分组成 第二 程序中的一切操作都是通过向对象发送消息来实现的 1.2 什么是对象什么是类...
  • 面向对象的思想

    2015-08-07 20:55:59
    带你理解面向对象的思想(有例子),面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切事物皆为对象;对象是属性及其操作的封装体;对象可按其性质...
  • delphi 面向对象基础示例 接口,覆盖,重载多态,抽象 静态方法 匿名事件属性 属性封装 事件属性 调用其他单元的函数不加类名前缀 程序间互传消息获取其它程序句柄 结构体复制 结构体也可以封装 结构体也可以过程或...
  • JavaScript 进阶教程(1)--面向对象编程

    万次阅读 多人点赞 2020-08-16 18:13:37
    理解面向对象开发思想 掌握 JavaScript 面向对象开发相关模式 2 面向对象介绍 2.1什么是对象 Everything is object (一切皆对象) 我们可以从两个层次来理解对象: (1) 对象是单个事物的抽象。...
  • Java面向对象面试题总结

    万次阅读 多人点赞 2019-02-27 17:22:05
    答:(1)在类的定义中设置访问对象属性(数据成员)及方法(成员方法)的权限,限制本类对象及其他类的对象使用的范围。 (2)提供一个接口来描述其他对象的使用方法 (3)其他对象不能直接修改本对象所拥有的...
  • 面向对象是一种新兴的程序设计方法, 或者是一种新的程序设计规范, 其基本思想是使用对象类继承封装消息等基本概念来进行程序设计从现实世界中客观存在的事物即对象出发来构造软件系统并且在系统构造中尽可能运用...
  • 面向对象技术

    千次阅读 2018-09-14 17:08:03
    面向对象:Coad和Yourdon给出了一个定义:“面向对象=对象+类+继承+通信” 如果一个软件系统是使用这样4个概念设计和实现的,则我们认为这个软件系统时面向对象的。 对象:是面向对象开发模式的基本成分。每个对象...
  • C++面试题-面向对象-面向对象概念

    千次阅读 2019-01-11 00:16:27
    C++面试题-面向对象-面向对象概念 问:说说C++和C的主要区别? 答: C语言属于面向过程语言,通过函数来实现程序功能。而C++是面向对象语言,主要通过类的形式来实现程序功能。 使用C++编写的面向对象应用程序比...
  • 面向对象分析

    千次阅读 2018-06-19 11:39:30
    面向对象就是既使用对象又使用类和继承等机制,而且对象之间仅能通过传递消息实现彼此通信。 传统的软件开发方法调自顶向下完成软件开发,属过程抽象。  面向对象的环境提供了更强有力的抽象机制,支...
  • 面向对象核心概念

    2019-05-21 16:46:16
    文章目录对象哲学中的对象面向对象中的对象面向对象与基于对象面向对象基于对象封装与信息隐藏封装信息隐藏信息隐藏内容实例化抽象数据类型(Abstract Data Type,ADT)性质类属性(attribute)操作消息传递泛化与...
  • 什么是面向对象程序设计

    万次阅读 多人点赞 2019-08-22 11:10:04
    1.面向对象和面向过程区别→2.什么是对象→3.什么是消息→4.什么是封装→5.什么是多态→6.面向对象的优点: 本文介绍 C++基础概念和知识。如果您想看其他语言(如 java)的语法,本文不涉及。 1.面向对象和面向...
  • 面向对象中的 对象、消息传递和方法 对象是类的实例。尽管对象的表示在形式上与一般数据类型十分相似,但是它们之间存在一种本质区别:对象之间通过消息传递方式进行通信。 消息传递原是一种与通信...
  • 浅谈面向对象方法学

    千次阅读 热门讨论 2020-05-15 18:00:32
    一、面向对象的基本概念 对象、类、实例、消息、方法 二、面向对象的基本特征 封装、继承、多态 三、面向对象的建模 对象模型、动态模型、功能模型 四、面向对象设计 五、面向对象的实现 设计风格 测试策略...
  • 这个该框架对应的所有源码和开发目录的完整版本,欢迎下载和使用。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 214,761
精华内容 85,904
关键字:

面向对象消息