面向对象方法

61条面向对象设计的经验原则

烂漫一生 提交于 2020-02-25 03:47:50
作者:Arthur J.Riel “你不必严格遵守这些原则,违背它们也不会被处以宗教刑罚。但你应当把这些原则看成警铃,若违背了其中的一条,那么警铃就会响起。” ----------Arthur J.Riel (1)所有数据都应该隐藏在所在的类的内部。 (2)类的使用者必须依赖类的共有接口,但类不能依赖它的使用者。 (3)尽量减少类的协议中的消息。 (4)实现所有类都理解的最基本公有接口[例如,拷贝操作(深拷贝和浅拷贝)、相等性判断、正确输出内容、从ASCII描述解析等等]。 (5)不要把实现细节(例如放置共用代码的私有函数)放到类的公有接口中。 如果类的两个方法有一段公共代码,那么就可以创建一个防止这些公共代码的私有函数。 (6)不要以用户无法使用或不感兴趣的东西扰乱类的公有接口。 (7)类之间应该零耦合,或者只有导出耦合关系。也即,一个类要么同另一个类毫无关系,要么只使用另一个类的公有接口中的操作。 (8)类应该只表示一个关键抽象。 包中的所有类对于同一类性质的变化应该是共同封闭的。一个变化若对一个包影响,则将对包中的所有类产生影响,而对其他的包不造成任何影响 . (9)把相关的数据和行为集中放置。 设计者应当留意那些通过get之类操作从别的对象中获取数据的对象。这种类型的行为暗示着这条经验原则被违反了。 (10)把不相关的信息放在另一个类中(也即:互不沟通的行为)。

面向对象小结

こ雲淡風輕ζ 提交于 2020-02-24 23:07:02
面向对象是相对面向过程而言的,面向过程强调的是功能行为,面向对象是将功能封装进对象,强调具备了功能的对象。 [万物皆对象] 面向对象三大特征:封装、继承、多态 类和对象的关系: 类:对现实生活中事物的描述 对象:就是这类事物,实实在在存在个体 描述事物就是描述事物的属性(对应类中变量)和行为(对应类中方法),属性和行为共同 称为类的成员(成员变童和成员方法) 成员变量作用于整个类中,局部变量作用于函数中,或者语句中 成员变量在堆内存中,因为对象的存在,才在内存中存在 局部变量:存在栈内存中 封装: 是指隐藏对象的属性和实现细节,仅对外提供公共访问方式 好处:将变化隔离、便于使用、提高重用性、提高安全性 封装原则:将不需要对外提供的内容都隐藏起来,把属性都隐藏,提供公共方法对其访问 private (私有):权限修饰符,用于修饰类中的成员(成员变里,成员函数),私有只在本类 中有效。 static用于修饰成员(成员变里和成员函数) 被儋饰的成员:随着类的加载而加载,优先于对象存在,被所有对象所共享,可以直接被类 名调用。 类名.静态成员[方法区、共享区、数据区]_--存放类中的方法和共享数据。 什么时候定义静态函数:当功能内部没有访问到非静态数据(对象的特有数据),那么该功 能可以定义成静态的,用类名直接调用。 继承: 1、提高了代码的复用性 2、让类与类之间产生了关系,有了这个关系

面向对象

老子叫甜甜 提交于 2020-02-24 10:00:19
1. 初识面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方: 大象进冰箱 步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门 面向对象:大象, 你进冰箱. 此时主语是大象. 我操纵的是大象. 此时的大象就是对象 2. 类. 对象 类: 就是图纸. 创建对象的第一步. 先画图纸. 先写类. 对象: 对象就是车. 通过图纸造出来的具体的东西. 通过类来创建对象 类与对象的关系: 类是对xxx事物的归类. 写: __init__(self, 参数) 参数一般作为属性设置给对象. 对象就是self, 对属性的封装. def 方法(self, 参数): 方法. 第一个参数一般是固定的self. 当前类的对象. pass 对象是xx类型的一个具体 创建对象: 类名() 创建类: class 类名: def __init__(self): # 初始化方法. 又被成为构造方法 self.属性 = 值 self.属性 = 值 self.属性 = 值 def fangfa(self): 方法体(函数体, return) 创建对象: 变量 = 类名() # 实例化 <-> 创建对象 变量.属性 # 访问对象的属性信息 变量.方法() # 访问类中的方法 3. 面向对象和面向过程的对比

初识面向对象

你。 提交于 2020-02-24 08:40:54
1. 初识面向对象   面向过程:     一切以事务的发展流程为中心.   面向对象:     一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象   打比方:     大象进冰箱     步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门     面向对象:指挥对象,大象, 你进冰箱.     此时主语是大象. 我操纵的是大象. 此时的大象就是对象 2. 类. 对象   类: 就是图纸. 创建对象的第一步. 先画图纸. 先写类.   对象: 对象就是车. 通过图纸造出来的具体的东西. 通过类来创建对象   类与对象的关系:   类是对xxx事物的归类.   写:   __init__(self, 参数) 参数一般作为属性设置给对象. 对象就是self, 对属性的封装.   def 方法(self, 参数): 方法. 第一个参数一般是固定的self. 当前类的对象.     pass   对象是xx类型的一个具体   创建对象: 类名()   创建类:     class 类名:       def __init__(self): # 初始化方法. 又被成为构造方法         self.属性 = 值         self.属性 = 值         self.属性 = 值       def fangfa(self):         方法体

python面向对象(一)

醉酒当歌 提交于 2020-02-24 08:35:06
面向对象 1.初始面向对象 面向过程: 一切以事务的发展流程为中心. 面向对象: 一切以对象为中心. 一切皆为对象. 具体的某一个事务就是对象 打比方:   面向过程 大象进冰箱     步骤: 第一步, 开门, 第二步, 装大象, 第三步, 关门   面向对象:   大象, 你进冰箱.     此时主语是大象. 我操纵的是大象. 此时的大象就是对象 2. 类和对象 类: 就是图纸. 创建对象的第一步. 先画图纸. 先写类. 对象: 对象就是车. 通过图纸造出来的具体的东西. 通过类来创建对象 类与对象的关系: 类是对xxx事物的归类. def __init__(self, 参数) 参数一般作为属性设置给对象. 对象就是self, 对属性的封装.       pass def 方法(self, 参数): 方法. 第一个参数一般是固定的self. 当前类的对象. pass 对象是xx类型的一个具体 创建对象: 类名() 创建类: class 类名: def __init__(self): # 初始化方法. 又被成为构造方法 self.属性 = 值 def fangfa(self): 方法体(函数体, return) 创建对象: 变量 = 类名() # 实例化 <-> 创建对象 变量.属性 # 访问对象的属性信息 变量.方法() # 访问类中的方法 class HeShang: def

Python学习——面向对象(二)

落花浮王杯 提交于 2020-02-24 08:32:58
类变量:存在类中的变量,可以通过【类名.类变量名】的方式进行调用。也可以使用【self..类变量名】(self会先从本实例中找,如果本实例没有就去类中找) 类方法:存在类中的方法,可以通过【类名.类方法】的方式进行调用。使用 @classmethod def eat(cls): cls代表类     1、直接使用类名调用,不需要实例化     2、可以使用类变量,cls.类变量     3、实例对象也可以调用类方法:self.类方法     4、类方法里面不可以有实例方法和属性     @classmethod     def eat(cls): cls代表类 静态方法:就是一个普通函数,定义在类中而已。 @staticmethod 静态方法()     1、可以通过类名.静态方法名调用     2、不能使用实例方法和属性     3、不能使用类方法和属性     4、实例化的对象可以调用静态方法。对象名.静态方法名 属性方法 :看起来像变量的函数。 @property def 方法名(self): 1、本身是一个实例方法      2、没有入参,只有self本来对象的一个参数      3、使用方法:对象.属性方法。当变量使用,没有“()” 析构函数:在实例被销毁的时候执行,一般写关闭数据库和关闭文件等操作。释放内存 私有函数:在函数或者变量前面加__,就是私有变量

python面向对象的方法类型,继承等

梦想的初衷 提交于 2020-02-24 08:31:07
析构函数 class My: def __init__(self): print('构造函数,类在实例化的时候执行') def __del__(self): print('析构函数,实例被销毁的时候执行') def say(self): print('say')m=My()m.say() 私有 类方法 1 不实例化,可以直接用类调用 2 可以使用类变量,cls.xxx 3 实例化也可以通过self.xx调用类方法 4 类方法是不能用实例方法和实例变量的 class My: name='holly' #类方法 @classmethod#装饰器,不改变原来的函数,给函数增加新功能 def eat(cls): print(cls.name) print('吃饭')My.eat()m=My()m.eat()实例方法类里面正常定义的方法都叫实例方法(self)静态方法:就是一个普通的方法,只是放在了类里面而已不需要实例化直接用类名可以调用用不了实例方法,用不了实例变量用不了类方法,类变量 class My:   def __init__(self):   print('构造函数,类在实例化的时候执行') #实例化方法 def cry(self): print('cry') # 静态方法 @staticmethod def study(): print('study hard')My

OC面向对象—多态

£可爱£侵袭症+ 提交于 2020-02-24 06:15:51
OC 面向对象—多态 一、基本概念 多态在代码中的体现,即为多种形态,必须要有继承,没有继承就没有多态。 在使用多态是,会进行动态检测,以调用真实的对象方法。 多态在代码中的体现即父类指针指向子类对象。 Animal 类的声明 Animal 类的实现 Dog 类继承自 Animal 类 Dog 类的实现 测试程序: 二、使用注意 代码分析: Dog *d=[[Animal alloc] init]; 动物是一条狗?语义正确吗? NSString *str=[Dog new]; 狗是一个字符串?正确吗? Oc 语言是一门弱语法的语言,编译的时候并不会报错,所以这就要求我们在实际的开发过程中一定要按照既定的规范来写代码,不要出现狗是一个字符串这样的问题。 多态的好处: 需要一个新的函数专门用来喂狗 Void feed(Dog *d) { [d eat]; } 如果这个时候也需要喂猫,那就应该重写新一个新的函数 Void feed(Cat *c) { [c eat]; } 而狗和猫实际上都继承自动物这个类,在这里就可以使用多态来简化代码了。 这里只需要把函数的参数写成是 Animal * 类型的,那么 Dog 和 Cat 类型的对象就都可以传入进来。 调用的时候直接改变参数就可以了。 多态的局限性:父类类型的指针变量不能直接调用子类特有的方法。 不建议的做法 ~ Animal *a=[

js面向对象

笑着哭i 提交于 2020-02-24 04:10:09
什么是面向对象 在js中对象是一个无序的数据集合或者也可以说是属性和方法的集合,可以动态的添加属性可方法。面向对象是一种软件开发的思想和面向过程是相对应的,就是把程序看作一个对象,将属性和方法封装其中,以提高代码的灵活性、复用性、可扩展性。面向过程是按需求一步一步的用代码从上往下实现,这样做代码不易维护、复用、扩展。所以在大型项目中我们需要以面向对象的方式去开发项目,这样就体现了用面向对象的方法写出来的代码易维护、易复用、易扩展。 面向对象的特征:封装、继承、多态、抽象。 封装 我对封装的理解就是把属性和方法封装其中,将不需要对外公开的内容隐藏起来提供接口让用户访问属性和方法。 继承 继承就好比我继承了我爸部分的相貌特征但我和我爸又不完全长一个样子,而且我自己没有钱但我爸有钱,我爸的钱可以给我花。就是指子类构造函数继承了父类构造函数的一些属性和方法,但其本身也有一些自己的方法和属性。 多态 多态性是指相同的操作或函数、过程可作用于多种类型的对象上并获得不同的结果。比如一个我养了条狗和一个猫,我对它们发出“叫”的指令时它们一个是“汪汪汪”的叫一个是“喵喵喵”的叫,我给的指令是一样的它们发出来的声音却不一样。 抽象 先不去考虑细节的东西,从大的方向开始。比如学生就是一个抽象实体,他的属性并不足以描述出一个人,需要更多的细节才能描述一个人的方方面面。使用抽象可以尽可能避免过早考虑一些细节

JavaScript面向对象

家住魔仙堡 提交于 2020-02-24 02:11:55
js就是个面向对象语言,一切皆对象 一、什么是面向对象? 举个最简单点的例子来区分 面向过程和面向对象 有一天你想吃鱼香肉丝了,怎么办呢?你有两个选择 1、自己买材料,肉,鱼香肉丝调料,蒜苔,胡萝卜等等然后切菜切肉,开炒,盛到盘子里。 2、去饭店,张开嘴:老板!来一份鱼香肉丝! 看出来区别了吗?这就是1是面向过程,2是面向对象。 二、对象实例化方式 1.字面量创建 弊端:这样的写法如果多生成几个(100个!)实例,写起来就非常麻烦,并且造成代码冗余。 2.内置构造函数 弊端:通过写一个函数,解决代码重复的问题,但还是造成了代码冗余。 3.工厂函数 弊端:无法判断对象属于哪个类型。 4.构造函数模式 弊端:每个实例调用的方法应该是一致的,但是实际上在生成实例时,各自都创建了自己的方法。消耗了内存。 三、Prototype 原型 .Javascript中所有的对象都是Object的实例,并继承Object.prototype的属性和方法,也就是说,Object.prototype是所有对象的爸爸。 四、原型链 让一个类型(构造函数)的原型对象 访问另外一个函数的s属性 查找顺序 在Js中 1.在自身的私有属性查找 2.沿着原型(链)向上查找 一直到objec.prototype为止 五、this指向 1.普通模式下 指向调用函数的对象。 对象里面指向obj