继承和面向对象设计

o-v-o o-v-o     2023-02-09     129

关键词:

继承与面向对象设计

32. 确定你的public继承塑模出is-a关系

  • "public继承"意味is-a.适用于base classes身上的每一件事情一定也适用于derived classes身上,因为每一个derived class对象也都是一个base class对象

33. 避免遮掩继承而来的名称

  • derived classes 内的名称会遮掩base classes 内的名称.在public继承下从来没有人希望如此.
  • 为了让被遮掩的名称再见天日,可使用using 声明式或转交(forwardign functions).

34. 区别接口继承和实现继承

  • 接口继承和实现继承不同.在public继承之下,derived classes 总得继承base class的接口.
  • pure virtual函数只具体指定接口继承
  • 简朴的(非纯)impure virtual 函数集体指定接口继承集缺省实现继承
  • non-virtual 函数具体指定接口继承以及强制性实现继承

35. 考虑virtual函数以外的其他选择

  • virtual 函数的替代方案包括NVI手法及Strategy设计模式的多种形式.NVI手法自身是一个特殊形式的Template Method设计模式.
  • 将机能从成员函数移到class外部函数,带来一个缺点是,非成员函数无法访问class 的non-public成员
  • trl::function 对象的行为就像一般函数指针.这样的对象可接纳"与给定之目标签名式(target signature)兼容"的所有可调用物(callable entities).

36.绝不重新定义继承而来的non-virtual函数

  • 绝对不要重新定义继承而来的non-virtual函数

37.绝不重新定义继承而来的缺省参数值

  • 绝对不要重新定义一个继承而来的缺省参数值,因为缺省参数值都是静态绑定,而virtual函数--你唯一应该覆写的东西--却是动态绑定

38.通过复合塑模出has-a 或"根据某物实现出"

  • 复合(composition)的意义和public继承完全不同
  • 在应用域(application domain),复合意味着has-a(有一个).在实现域(implementation domain),复合意味is-implemented-in-terms-of(根据某物实现出)

39. 明智而审慎地使用private 继承

  • private 继承意味is-implemented-in-terms-of (根据某物实现出).它通过比复合(composition)的级别低.但是当derived class需要访问protected base class的成员,或需要重新定义继承而来的virtual函数时,这么设计是合理的.
  • 和复合(composition)不同,private 继承可以造成empty base 最优化.这对致力于"对象尺寸最小化"的程序库开发者而言,可能很重要

40. 明智而审慎地使用多重继承

  • 多重继承比单一继承复杂.它可能导致新的歧义性,以及对virtual继承的需要

  • virtual 继承会增加大小,速度,初始化(及赋值)复杂度等等成本.如果virtual base classes 不带任何数据,将是最具实用价值的情况

  • 多重继承的确与正当用途.其中一个情节设计"public 继承某个Interface class"和"private 继承某个协助实现的class"的两相组合.

js常见知识点3.面向对象之继承设计模式

...蔽内部细节、调用外部接口实现对应功能(函数调用)  继承:子类继承父类中的属性和方法  多态(js中不存在多态的概念)二、继承  建议回复:    继承:子类继承父类中的属性和方法,这些属性和方法在子类中... 查看详情

面向对象程序设计-数据抽象和继承

  面向对象衍生  面向对象编程方法和编程语言一样在不断地演变发展。到了20世纪90年代,面向对象的方法在软件设计和分析等软件开发的上层领域中流行起来。1994年,当时主要的面向对象分析和设计方法Booth、OMT(ObjectMo... 查看详情

面向对象的程序设计

...之间的交互3.4类名称空间与对象/实例名称空间3.5小结四继承与派生4.1什么是继承4.2继承与抽象(先抽象再继承)4.3继承与重用性4.4组合与重用性4.5接口与归一化设计4.6抽象类4.7继承实现的原理(继承顺序)4.8子类中调用父类方... 查看详情

06_继承与派生

一:继承的概念  面向对象程序设计有4个主要特点:抽象、封装、继承和多态性。我们已经讲解了类和对象,了解了面向对象程序设计的两个重要特征一数据抽象与封装,已经能够设计出基于对象的程序,这是面向对象程序... 查看详情

第十篇面向对象的程序设计

...之间的交互3.5类名称空间与对象/实例名称空间3.6小结四继承与派生4.1什么是继承4.2继承与抽象(先抽象再继承)4.3继承与重用性4.4组合与重用性4.5接口与归一化设计4.6抽象类4.7继承实现的原理(继承顺序)4.8子类中调用父类方... 查看详情

面向对象设计:共性vs个性-------继承的粒度和聚合的粒度以及类的重构

...都能够有不同的属性值,这反映了每一个对象的个性继承的粒度对于一颗继承树,应该把继承的层次细化到什么程度才算合适呢?首先。必须基于需求来确定集成的力度,假设提取对象的某一个共性对于我们要解决的问题没... 查看详情

面向对象设计中的继承或组合

】面向对象设计中的继承或组合【英文标题】:Inheritanceorcompositioninobjectorienteddesign【发布时间】:2021-05-3114:42:27【问题描述】:我在流行的网站和设计课程上看到了许多使用组合定义关系的类图,例如:管理员有一个人实例裁... 查看详情

面向对象程序设计具都有哪些特性呢?

面向对象程序设计具有的特性有:抽象性、封装性、继承性和多态性。面向对象程序设计有4个主要特点,分别是:抽象、封装、继承、多态。以下是具体解释;一、抽象和封装类和对象体现了抽象和封装抽象就是解释类与对象... 查看详情

学习日记之备忘录模式和继承面向对象设计

备忘录模式(Memento):在不破坏封装性的前提下。捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。(1),把要保存的细节给封装在Memento中,那一天要更改保存的细节也不... 查看详情

面向对象程序设计

...t):eyes=2defget_eye(self):returnself.eyesdefset_eye(self,eye):self.eyes=eye继承:继承可以使子类拥有父类的属性和方法,并且可以重些这些方法,加强代码的复用性,python中子类可以有多个 查看详情

面向对象编程思想(oop)

...封装的实现依赖类的修饰符(public、protected和private等)继承:对现有类的一种复用机制。一个类如果继承现有的类,则这个类将拥有被继承类的所有非私有特性(属性和操作)。这里指的继承包含:类的继承和接口的实现。多... 查看详情

第六章面向对象的程序设计(3继承)

6.3继承许多OO语言都支持两种继承方式:接口继承和实现继承。接口继承只继承方法签名,而实现继承则继承实际的方法。如前所述,由于函数没有签名,在ECMAScript中无法实现接口继承。ECMAScript只支持实现继承,而且其实现继... 查看详情

面向对象(oo)的程序设计——继承

仅支持实现继承,且主要依靠原型链来实现,不过一般会混合构造函数一起实现继承 1原型链 继承使用原型链进行传递,类似指针一层层向上指向对应原型,构成链状在使用原型链近似实现继承时,实例中的所有属性和... 查看详情

java面向对象程序设计(抽象类和接口-----)

  接口       在Java语言中,仅支持单一继承,即一个子类只能有一个直接的父类,然而在日常生活中,多继承的问题在所难免如电子书既是一种图书,同时又是一种多媒体,这种继承关系要求子类继承多个父类... 查看详情

对象和类

...jectOriented)最初,面向对象是指在程序设计中采用封装、继承、对台等设计方法。现在,面向对象的思想已经涉及到软件开发的各个方面。如:面向对象的分析(OOA,ObjectOrientedAnalysis),面向对象的设计(OOD,ObjectOrientedDesign)... 查看详情

java面向对象程序设计思想(代码片段)

...:面向功能概念面向对象的三大特性封装封装的实现继承继承的实现C++和Java继承区别多态多态的实现类(对象)之间的关系UML类图泛化关系(Generalization)实现关系(Realization)聚合关系(Aggregation)组合关系(Composition)关联关系(Ass... 查看详情

java面向对象程序设计思想(代码片段)

...:面向功能概念面向对象的三大特性封装封装的实现继承继承的实现C++和Java继承区别多态多态的实现类(对象)之间的关系UML类图泛化关系(Generalization)实现关系(Realization)聚合关系(Aggregation)组合关系(Composition)关联关系(Ass... 查看详情

面向对象--继承和重写

1、什么继承?继承有什么优点?继承是从已有的类中派生出新的类,新的类能吸收已有的的数据属性和行为。优点:1.代码的重用性。2.父类的属性方法可用于子类3.设计应用程序变得简单4.子类可以扩展父类的属性和方法。2、... 查看详情