面向对象

面向对象设计原则

主宰稳场 提交于 2019-12-14 16:03:23
参考书籍:设计模式(第二版) 七大原则:单一职责原则、开闭原则、里氏代换原则、依赖倒转原则、接口隔离原则、合成复用原则和迪米特法则。 可维护性较低的软件有4个原因: 1.过于僵硬。2.过于脆弱、3.复用率低、4.黏度过高 好的系统应具备如下三个性质: 1.可扩展性2.灵活性3.可插入性 单一职责原则:一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。 开闭原则:一个软件实体应当对扩展开放,对修改关闭。也就是说在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,即实现在不修改源代码的情况下改变这个模块的行为。抽象化是开闭原则的关键 里氏代换原则:所有引用基类(父类)的地方必须能透明地使用其子类的对象。 依赖倒转原则:高层模块不应该依赖低层模块,它们都应该依赖抽象。抽象不应该依赖于细节,细节应该依赖于抽象。代码要依赖于抽象的类,而不要依赖于具体的类;要针对接口或抽象类编程,而不是针对具体类编程。 接口隔离原则:客户端不应该依赖那些它不需要的接口。 合成复用原则:尽量使用对象组合,而不是继承来达到复用的目的。 迪米特法则:每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。迪米特法则的主要用途在于控制信息的过载 来源: https://www.cnblogs.com/liujinxin123/p/12039712.html

※设计模式※→☆结构型模式☆============xxx模式

孤人 提交于 2019-12-13 16:24:20
模式概述 Bridge模式应该是设计模式中比较复杂和理解性较难的模式了,当然,此模式是也是面向对象开发和面向对象设计中占有相当重要的席位,因此我们会有OO开发中经常使用到。在Bridge模式中我们使用组合(委托)和方式将抽象和实现进行解耦合,这样可以使 抽象和实现都独立化 。这说这里,也许我们想起了Build模式。没错,确实是这样的,Build模式也是使用组合(委托)的方式实现了" 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示 " Build模式见: http://blog.csdn.net/xiaoting451292510/article/details/8330462 模式结构 模式讨论 模式实现 来源: CSDN 作者: arvin_xiaoting 链接: https://blog.csdn.net/xiaoting451292510/article/details/103527774

Java面向对象-4.继承、this、super

ぃ、小莉子 提交于 2019-12-10 14:59:52
extends继承: 提高了代码的复用性 提高了代码的维护性 让类与类产生了关系,是多态的前提 弊端:类的耦合性增强了 开发的原则:高内聚(自己能做的自己做),低耦合 java中类的继承特点: 只支持单继承,不支持多继承(一个儿子只能有一个爹) 支持多层继承(父、子、孙) 如果想用这个体系的所有功能用最底层的类创建对象 如果想看这个体系的共性功能,看最顶层的类 继承注意事项: 子类只能继承父类所有非私有的成员变量和方法 子类不能继承父类的构造方法,但是可以通过super关键字去访问父类构造方法 不要为了部分功能而去继承 继承中成员变量的关系: 若父类与子类有相同的成员变量,则子类对象调用时就调用子类的成员变量(就近原则) 若父类与子类有相同的成员变量,则在成员变量前加上super就可以在子类对象调用时就调用父类的成员变量 若父类与子类有相同的成员变量,则在成员变量前加上this就可以在子类对象调用时就调用子类的成员变量 this和super的区别: this可以访问自己的成员变量,若本类没有这个成员变量,也可以访问父类的成员变量 super只能访问父类的成员变量 在每一个类中构造方法里面都会有一个默认的super()方法,子类调用构造方法时都会先调用父类的构造方法 子类中所有构造方法都会默认访问父类的空参的构造方法,若自己给出super(参数);则会访问父类有参的构造方法

Java面向对象03成员变量和局部变量

允我心安 提交于 2019-12-10 14:15:58
成员变量和局部变量 1.定义 成员变量:在类中定义,但定义在方法之外的变量称作成员变量。可以不用赋值,成员变量有默认的初始值。 默认初始值如下 整数类型(byte、short、int、long):0 浮点数型(float、double):0.0 字符类型(char):' '(空格,不是空) 布尔类型(boolean):false 引用数据类型: String:null 数组:null 自定义的类型:null 局部变量:在代码块、方法中、方法参数定义的变量就是局部变量。局部变量使用之前,需要在方法中定义,并且赋值!局部变量没有默认初始值。 示例: public class Person(){ public String name(); public int age(); public cha gender; public void selfIntroduce(){ public String hobbit; System.out.println("*********"); } } 类Person中的成员变量为name/age/gender,也叫做类Person的属性。 类Person中的成员方法为selfIntroduce,也叫做类Personde的行为或者操作。 定义在selfIntroduce方法中的hobbit是局部变量。 2.作用域 成员变量的作用域在整个定义的类中都可以使用

面向对象设计原则

帅比萌擦擦* 提交于 2019-12-10 02:15:25
单一职责原则: 一个对象应该只包含单一的职责,并且该职责被完整的封装到一个类中 开闭原则: 软件实体应当对扩展开放,对修改关闭 里氏代换原则: 所有引用基类的地方必须能透明的使用其子类的对象 依赖倒转原则: 高层模块不应该依赖底层模块,它们都应该依赖抽象,抽象不应该依赖于细节,细节应该依赖于抽象 接口隔离原则: 客户端不应该依赖那些它不需要的接口 合成复用原则: 优先使用对象组合,而不是通过继承来达到复用的目的 迪米特法则: 每一个软件单位对其它单位都只有最少的知识,而且局限于那些于本单位密切相关的软件单位 设计原则包括设计模式,重在理解,下面是我觉的写的不错的一篇关于设计原则的博客: 面向对象设计原则详解 来源: https://www.cnblogs.com/chunyun/p/11982403.html

第一类对象(First-class Object)

这一生的挚爱 提交于 2019-12-09 23:23:58
In programming language design, a first-class citizen (also object, entity, or value) in a given programming language is an entity which supports all the operations generally available to other entities. These operations typically include being passed as a parameter, returned from a function, and assigned to a variable. 第一类对象(First-class Object)在1960年由Christopher Strachey 发明,原来称之为第一类公民(First-class citizen),意思是指函数可以作为电脑中的第一类公民。英文中也称之为First-class entity或First-class value。 定义 第一类对象不一定是指面向对象程序设计中所指的对象,而是指程序中的所有实体 (比如:变量、函数、队列、字典等等)。一般第一类对象具有一下特征: 可以被存入变量或其他结构 可以被作为参数传递给其他方法/函数 可以被作为方法/函数的返回值

PHP V5.3 用延后静态绑定搞活面向对象编程

淺唱寂寞╮ 提交于 2019-12-09 21:12:19
面向对象编程(OOP)可让开发人员通过使用数据抽象、封装、模块化、多态性和继承减少和简化代码 — 在对 OOP 有着深刻的理解的前提下。对 OOP 特性的了解还让 PHP 编码者得以利用 设计模式 — 一些众所周知的用来解决常见问题的算法。PHP 自 V3.0 就已经提供了 OOP 功能,但直到 V5.3 到来时,PHP 的 OOP 实现内的怪异之处还是会阻止一些常见设计模式的使用。随着 PHP V5.3 的延后静态绑定(LSB)特性的出现,这些怪异之处均已彻底消失。 本文向您介绍了在 PHP V5.3 出现之前,存在问题的一些设计模式,解释了这些模式为何不能工作。然后展示了 PHP V5.3 的 LSB 特性,并给出了单例和活动记录设计模式。 重新回顾 OOP 如果您过去曾接触过 PHP OOP,那么很可能会出于以下原因而决定不使用它: 读过诸多宣称 PHP OOP 有问题的博文中的一条。 曾尝试实现一个简单的设计模式,但没有成功。 而对于 PHP V5.3,有关 OOP 的博文都是正面的,并且 PHP OOP 的问题在很大程度上已得到解决。是时候重回 PHP OOP 了。通过本文,您将看到在 V5.3 出现之前曾存在问题的一些设计模式:单例、生成器、工厂方法和活动记录。 单例、生成器和工厂方法设计模式被视为是 创建型 的模式,因它们可协助对象的构建。单例模式可能是最常用的

面向对象的JavaScript——类

痞子三分冷 提交于 2019-12-09 20:49:07
在java里,我们定义类的时候用的是class关键字,但是JavaScript中class是保留字,另有用途,所以我们要采用其他的方法来定义JavaScript中的类。 定义类 利用JavaScript中的function关键字,类名首字母一般采用大写,如: function Person(id,name,age){ this.id = id; this.name = name; this.age = age; } 回想java的类中会有一个与该类同名的构造函数,即使开发者自己没有写,java虚拟机也会给出一个默认的构造函数。而JavaScript这里,上面这个类本身其实也是一个构造函数。这里记住一句话: “构造函数为对象的‘类’提供一个名字,并初始化属性。” 我们可以用下面的方法来使用这个类: var per = new Person("001","Xiao Wei","12"); 上面那个构造函数里的this指针(严格意义上this不是指针,只是我们把它想象为指针会容易理解一些)指向的变量即是Person类的数据成员(或者叫属性),访问权限是public。java的类中,除了有属性之外,还有方法(也就是c里的函数)。下面我们为JavaScript类添加函数。 function Person(id,name,age){ this.id = id; this.name = name

TypeScript 高级类型 类(class)

吃可爱长大的小学妹 提交于 2019-12-09 16:42:50
  传统的JavaScript程序使用函数和基于原型的继承来创建可重用的组件,但对于熟悉使用面向对象方式的程序员来讲就有些棘手,因为他们用的是基于类的继承并且对象是由类构建出来的。 从ECMAScript 2015,也就是ECMAScript 6开始,JavaScript程序员将能够使用基于类的面向对象的方式。 使用TypeScript,我们允许开发者现在就使用这些特性,并且编译后的JavaScript可以在所有主流浏览器和平台上运行,而不需要等到下个JavaScript版本。 来源: https://www.cnblogs.com/fanqisoft/p/12011655.html

四Python对象和面向对象(一)

故事扮演 提交于 2019-12-07 15:19:18
1.使用from module import导入模块 Python有两种导入模块的方法,两种都有用,一种前面已经介绍过了为:import module;第二种导入的基本语法为:from module import attr,和第一种的一个重要区别是,attr被直接导入到局部名字空间去了,可以直接使用,而不需要加上模块限定名。你可以导入独立的项或使用from module import * 来导入所有东西。 #------------------------------------------------------------------------------- # coding: utf-8 # Purpose: 对象和面向对象 # # Author: daokun.zhu # # Created: 19/02/2013 # Copyright: (c) daokun.zhu 2013 #------------------------------------------------------------------------------- import types from types import FunctionType if __name__ == '__main__': print(types.FunctionType) #import types 生效了