
OOP
五道口纳什
wx公众号/B站:五道口纳什
展开
-
Python 设计模式 —— 单例
deblank Remove trailing whitespace from end of character array. (删除序列尾部(注意仅仅是尾部,不包括头部的空格)的空格)。原创 2016-05-08 23:25:37 · 1359 阅读 · 0 评论 -
面向对象特性、使用面向对象编程的场合
1. 构造函数的参数构造函数的功能正在于为类的成员变量赋初值;类内部除构造函数以外的其他成员函数,如何获取构造函数中的参数呢?将构造函数的参数保存在类的成员变量中。原创 2016-09-01 12:33:09 · 988 阅读 · 0 评论 -
面向对象 —— 类设计(十)—— 成员函数
成员函数的重载成员函数(包括构造函数)重载的目标一般是为客户端提供更为方便、灵活的接口,也即方便客户端的调用;一般而言,形参列表较长的会被形参列表的调用,自然需要为其指定一些默认的参数。原创 2016-05-25 22:24:27 · 1161 阅读 · 0 评论 -
面向对象举例(一) —— 顶点(vertex)、边(edge)与图(graph)
GraphVertexEdge原创 2016-12-08 10:45:05 · 3622 阅读 · 0 评论 -
结构体(struct)与类(class)
在 C++ 的范畴里,除了 struct 结构体不支持访问权限修饰符(private、protected、public)外,已不再区分二者的其他方面语法上的差异。因此,在 C++ 编程中,如果一个类是由 struct 来定义,说明其所有成员都可直接访问(通过.或者->)。原创 2016-09-19 17:24:29 · 1262 阅读 · 0 评论 -
成员变量的妙用
通过成员变量的引入实现更为丰富的判断。比如对于二叉树结点类型而言,通过对指向父节点的指针的引入,实现对一个结点是否为根节点的判断(父节点为空则该节点为根节点)。原创 2016-09-16 18:24:38 · 909 阅读 · 0 评论 -
面向对象 —— 对类(class)的理解
1. 从泛化到特殊原创 2016-08-30 16:04:46 · 2325 阅读 · 0 评论 -
Python 面向对象 —— super 的使用(Python 2.x vs Python 3.x)
注意区分当前的 Python 版本是 2.X 还是 3.X,Python 3.X 在 super 的使用上较之 Python 2.X 有较大的变化原创 2016-08-31 09:30:31 · 2910 阅读 · 0 评论 -
面向对象 —— 类设计(十一)—— 构造与析构
1. 构造函数1.1 构造函数的功能完成成员变量的初始化工作;1.2 构造函数的分类(1)默认构造(2)基于复制的构造原创 2016-05-25 23:30:22 · 859 阅读 · 0 评论 -
面向对象 —— 类的分类
很多时候,我们说的很多概念和对象都是内含丰富、层次复杂的综合体。为了实现正确的决策,就需要对其进行恰当的分类,和层次的厘清。原创 2016-10-11 11:41:58 · 1570 阅读 · 0 评论 -
面向对象(OOP)五大基本原则
书单《Object-Oriented Analysis & Design with Application》:Grady Booch, 下载地址:object-oriented-analysis-and-design-with-applications-2nd-editionC++:《Designing Object-Oriented C++ Applications》:Ro...原创 2017-06-27 08:42:11 · 1355 阅读 · 0 评论 -
Java 面向对象编程 tricks
方法中描述了参数:1. 构造器重载重载构造器时,使用描述了参数的静态工厂方法名,这样做的意义何在呢?就在于为动作赋予意义,提升代码的可解释性:传统的实例化方式:Complex fulcrumPoint = new Complex(23.0);实例化对象时,显然,new ClassName(param1, param2);并不能为我们提供参数的意义为何。使用描述了参数的静原创 2018-01-16 23:03:14 · 675 阅读 · 0 评论 -
面向对象 —— 静态成员(变量与方法)
面向对象 —— 类设计(一) 面向对象 —— 类设计(二) 面向对象 —— 类设计(三) 面向对象 —— 类设计(五) 普通成员变量,也即普通属性,属于类的各个实例化对象。那么该如何判断类的成员方法是不是静态的呢? 就看它是否需要访问类的非静态成员(在其方法内部会否用到类的普通成员变量/方法);如果没用到类的普通成员变量/方法,也就是不需要该变量或方法,也就是不依赖于类的实例原创 2016-03-01 18:08:53 · 1314 阅读 · 0 评论 -
面向对象 —— 结构与设计
1. 模型类与控制类让保存数据的类,仅用于数据的持有,除此之外,不向外界提供过多的修改接口(甚至是访问接口),修改(有时是访问)接口统一交由其控制类。举一个不恰当的例子,试卷类仅用于记录成绩,只有教师类(控制类)可对成绩进行一系列的修改和访问。让控制类(操纵数据的类),仅用于操作动作(而不保存数据),操纵的方式主要有两种:维护模型类的对象作为控制类的私有成员变量将模型类的实例以参数原创 2016-02-28 12:04:42 · 1371 阅读 · 0 评论 -
构造函数的理解(构造函数与 init 方法)
1. 如何更为合理地设置和处理构造函数的参数;原创 2016-08-27 22:22:06 · 5879 阅读 · 0 评论 -
Python 面向对象 —— 多重继承
多重继承(一个子类同时继承多个父类),容易造成混乱,即如果两个父类又相同的方法名和变量名时,无法确定继承哪一个。 正因如此,Java 等语言中并不支持多重继承(Java 是单继承多接口)。Python 允许多重继承,但为了避免使用上的混乱。Python 会自动按顺序选择拥有所需方法名的第一个父类执行,而忽略其他父类中的同名方法。原创 2016-08-31 09:43:55 · 1003 阅读 · 0 评论 -
Python 面向对象 —— __init_ 与 __new__
1. 子类是否自动调用父类的构造方法C++、Java 会在子类对象的构造中自动首先调用父类的构造;Python 则相对啰嗦一点: 如果子类不覆盖父类的__init__()方法,则子类默认将执行与父类一样的初始化方法;但是假如子类自己重写了(也成为覆盖)父类的__init__()方法,那么就需要显式的调用父类的初始化方法了。原创 2016-08-31 07:39:45 · 2476 阅读 · 0 评论 -
面向对象 —— 类设计(十二)—— 全局变量和成员变量
全局变量和成员变量都提供了一种共享和通信机制:只不过成员变量的共享和通信仅限于类内部,全局变量则是全局可见;更为重要的是,类的访问修饰符概念为成员变量的访问和修改施加了更多的限制,也即在面向对象的范畴里它是类型安全的。再论面向过程和面向对象首先一点,C++ 是语言联邦,支持包括面向过程、基于对象、面向对象的多编程范式。面向对象的三大特性:封装、继承、多态。原创 2016-05-27 11:44:41 · 2125 阅读 · 0 评论 -
面向对象——意图与逻辑(三)
const 型函数原创 2016-03-14 23:23:25 · 1165 阅读 · 0 评论 -
面向对象——类设计(一)
1. 实现一个类的顺序2. 私有成员函数2. 构成重载 vs 不构成重载?3. 默认构造和默认析构4. 为多态基类声明virtual析构函数原创 2015-11-20 15:14:06 · 1955 阅读 · 0 评论 -
面向对象——抽象基类
在 C++ 语法体系中,含有纯虚函数的类即为抽象基类,其子类必须给出纯虚函数的实现才可用于实例化。考虑如下的继承体系,Animal 为抽象基类,make_sound为其纯虚函数,run/swim为其虚函数,分别交由Dog类和Fish类具体实现(抽象基类要给出虚函数的函数体); 我们看到一个抽象基类主要包括三种成员函数:非虚函数,非纯虚函数,纯虚函数原创 2016-02-20 15:47:11 · 1165 阅读 · 0 评论 -
面向对象——类设计(六)——算法类
对于一个基于面向对象的数据聚类的基础类库(Class Library)而言,算法类(Algorithm)的设计是必不可少的一环。原创 2016-03-16 15:55:02 · 1656 阅读 · 0 评论 -
面向对象——意图与逻辑
编程语言中关键字的本质是什么?是向编译器传达一些信息。何谓意图与逻辑这样古怪的词?比如,对编译器而言,出现const修饰符,就是告诉(意图)编译器,“我不是左值,不可被修改,所有的修改动作都是非法的”。1. virtual同样对于一个类,在该类中兹要出现一次的virtual关键词,就表明,该类是用于继承关系的基类,更进一步,该类中存在纯虚函数(不给出函数体,impure 函...原创 2016-02-27 21:54:05 · 1464 阅读 · 0 评论 -
私有成员变量理解的补充
C++ 编译器是如何对类的私有成员变量进行符号解析的;原创 2016-03-01 12:48:15 · 1585 阅读 · 0 评论 -
C++设计模式::装饰模式or代理模式or面向切片编程(AOP)
一个实例 装饰模式:动态地给一个对象(而非一个类)添加一些额外的职责。就增加功能来说,装饰模式比创建子类更加灵活,因为有时我们的需求是给某个对象而不是整个类添加一些功能,比如为一部手机添加增加挂件、屏幕贴膜等等特性,一种比较灵活的方式,将手机(被装饰器类)嵌入到另一个对象(装饰器类)中(两者之间是一种组合关系),有这个对象(装饰器类)完成对象新特性的添加。如上面的装饰器UML类图所示,装饰器类原创 2015-11-20 21:16:03 · 3160 阅读 · 2 评论 -
面向对象——类设计(七)
定义(definition)即类、类间关系(1)A cluster is a collection of objects or records that share the same properties.is a :表继承关系Cluster、Record(Collection of Records)是类class Record;class Cluster: public std::vecto原创 2016-03-20 15:10:13 · 905 阅读 · 0 评论 -
如何通过父类引用“调用”子类所独有的方法
该做法的意义何在,姑且不论。今天我们主要关注该功能的实现,至少在实现的思路上是对面向对象思想的一次深入理解。首先一点,父类引用是无法调用子类独有的方法(不仅无法访问,而且是不可见的),结论是显然的,不然该方法就不作为子类所独有了,不然子类就没有任何的独特之处了(隐私空间),也就丧失了子类存在的意义。// C++原创 2016-02-24 12:21:18 · 5515 阅读 · 0 评论 -
面向对象 —— 类设计(九) —— 类设计的内在一致性
类设计的内在一致性,可以理解为“逻辑一致性”。所谓逻辑一致性,比如说,网络上流传甚广的“俗话说,俗话又说”系列,“宰相肚里”vs “有仇不报非君子”。(1)同一类内部;(2)继承关系的父类与子类之间。一个类定义是一个整体,它描述了一种程序对象。类定义比较复杂,其中可以有许多成分,特别是可能定义了许多方法,每个方法定义是类定义中的一个独立片段,编程语言对不同方法之间的关系没有任何约束,也不对这样一原创 2016-05-25 12:39:41 · 1314 阅读 · 0 评论 -
面向对象 —— 类设计(八)
成员变量与成员函数(1)思考:成员变量是一个类得以成立的前提,一个类应该持有哪些成员变量,应当首先考虑,这个类的设计的目的是什么。成员函数又分为私有成员函数,和公有成员函数,私有成员函数因为无法被外部调用,故设计的唯一目的是服务于公有成员函数,分担和减轻公有成员函数的负担,而公有成员函数自然是交由客户端调用,故公有成员函数设计的初衷在于我们希望在客户端以如何简洁的方式进行调用。(2)成员变量:为原创 2016-05-19 15:18:27 · 1054 阅读 · 0 评论 -
面向对象——意图与逻辑(五)
面向对象——意图与逻辑 面向对象——意图与逻辑 (二) 面向对象——意图与逻辑(三) 面向对象——意图与逻辑(四)总论(1)类是对私有成员变量的封装和抽象,(2)私有成员函数为公有成员函数服务,(3)一个公有成员函数如果不操纵私有成员变量是没必要放在一个类的内部的;(4)将一个成员函数声明为const型,说明的也是该成员函数与私有成员变量的关系(不可修改类的私有成员变量)原创 2016-03-16 18:56:46 · 1039 阅读 · 0 评论 -
面向对象——类设计(五)
空参空实现的构造函数派生类构造函数的初始化参数列表原创 2016-03-01 19:04:15 · 1190 阅读 · 0 评论 -
面向对象——私有成员
私有成员:私有成员变量,私有成员函数;对私有成员变量和私有成员函数的认识 私有函数的存在,避免冗余代码;私有成员变量和私有成员函数一样只开放给自己,所谓只开放给自己,对私有成员函数而言,私有成员函数仅供当前类的其他私有成员函数以及公有函数调用,所以在设计与实现一个类时,应当优先设计一个类的私有成员函数,然后是依赖于该私有成员函数的其他函数。对私有成员变量而言,即是除了当前所属类,其他类无原创 2016-02-24 14:23:34 · 1780 阅读 · 0 评论 -
面向对象——类设计(二)
1. 拷贝构造2. 类的分类2. clone()方法的实现3. 对私有成员变量和私有成员函数的认识私有成员变量和私有成员函数一样只开放给自己,所谓只开放给自己,4. 私有成员函数 ==》 让公有成员函数的生活更美好5. (私有)成员变量是一个类的中心和本质成员变量与类的赋值运算符重载原创 2016-02-21 11:39:51 · 1423 阅读 · 0 评论 -
面向对象——面向客户端编程
面向对象的因果论,因为存在客户端关于客观事实的抽象(也即所需的类),类间的关系,以及各自的方法,我们才进行类的设计与实现。再次,回到客户端编程时,在主函数(main),在多类、且类间关系较为复杂的局面下,客户端调用时,如何创建不同类的对象?首先需要考虑的是,各类的物理意义(类来源于实际,而抽象于实际),及其对应的构造函数(类间的关系,往往存在于各类的构造,以及各类维护的私有成员变量),类较多时,必将原创 2016-02-27 21:28:05 · 1110 阅读 · 0 评论 -
面向对象——意图与逻辑(四)
1. C++中的 get、set 方法2. Java/C++ 对多态的支持原创 2015-11-20 12:10:30 · 1260 阅读 · 0 评论 -
C++基础::类设计的几大原则
普通成员函数与虚函数在一个抽象基类的内部可以有三种形式成员函数:普通成员函数 所有派生类共享的函数实现,可以不给出实现(其实这样做没有意义),但当调用时自然会发生解析错误。虚函数 必须给出实现,否则子类无法进行函数的重写。子类可对其进行部分重写,根据需求。纯虚函数 全部子类如果想成为能够实例化对象的类,必须实现父类的全部纯虚函数,否则子类仍是抽象类无法实例化对象。 class B原创 2015-11-10 17:46:17 · 3248 阅读 · 2 评论