面向对象三个基本元素, 五大原则


三个基本原则: 继承, 封装, 多态

五个基本原则: 单一职责原则, 开放封闭原则, 里氏替换原则, 依赖倒置原则, 接口隔离原则, 迪米特法则, 组合/聚合复用原则(五大是前五个, 七大在加上后面两个)


继承: 

继承指的是建立一个新的派生类, 从一个或多个先定义的类中继承数据和函数, 可以重新定义或加进新的数据和函数, 从而建立了类层级或等级。继承指的是这样一种能力: 他可以使用现在类所有功能, 并在无需重新编写原来类的情况下对这些功能进行扩展。

创建新类成为: "子类"或"派生类"

被继承的类成为"基类"、"父类"、"超类"

继承的过程就是从一般到特殊的过程

在某些OOP(面向对象编程)语言中, 一个类可以继承多个基类, 但一般情况下, 一个类只有一个基类, 要实现多重继承, 可以通过多级继承实现。

继承概念实现的方式有三类: 实现继承、接口继承、可视继承

① 实现继承是指使用基类的属性和方法而无需额外编码的能力

② 接口继承是指仅使用属性和方法名称、但是子类必须提供实现代码能力

③ 可视化继承是指子窗口(类) 使用基窗口(类)的外观和代码实现功能

在使用继承时候留意, 两个类直接关系是属于关系。

在OC中,一个类继承另一个类,就是继承了父类所有的属性和方法,并且可以扩充自己的属性:而类别是在不改变原有类的基础上进行方法扩充。

例如: 动物分食草动物, 食肉动物, 食草动物分兔子, 羊, 牛, 食肉动物分老虎, 狮子。这里面兔子与食草动物就是一种继承关系

封装: 

把客观的事物封装成抽象的类, 并且类可以把自己的数据和方法只让可信的类或者对象操作, 对不可信的类进行信息的隐藏。简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,不能被外界访问。通过这种方式,对象对内部数据提供了不同级别的保护,以防止程序中无关的部分意外的改变或错误的使用了对象的私有部分。

封装的目的是增强安全性和简化编程,使用者不必了解具体的实现细节,而只是要通过外部接口,以特定的访问权限来使用类的成员。

例如:  我们把兔子封装成一个类, 兔子属性两只耳朵, 四条腿, 一双眼睛, 三瓣嘴

多态: 

同一个行为具有多个不同表现形式或形态的能力。一个实例的相同方法在不同情形有不同表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口。这意味着,虽然针对不同对象的具体操作不同,但通过一个公共的类,它们(那些操作)可以通过相同的方式予以调用。


多态的优点:

1. 消除类型之间的耦合关系 

2. 可替换性 

3. 可扩充性

4. 接口性  

5. 灵活性  

6. 简化性


多态存在的三个必要条件:

继承

重写(子类继承父类后对父类方法进行重新定义)

父类引用指向子类对象

  简言之,多态其实是在继承的基础上的。比如说今天我们要去动物园参观动物,那么你说我们去参观兔子、参观羊、参观狮子、参观老虎对的,但你不能说我们去参观汽车。在这个例子中,子类具有多态性:除了使用自己的身份,还能充当父类。


--------------------------------------------------------------------------


单一职责原则(SRP)

一个类的功能要单一,不能包罗万象, 应该有且只有一个去改变它的理由, 一个类应该只有一项工作

比如在职员类里,将开发工程师、业务人员、分析师、售后人员等都放在职员类里考虑,其结果将会非常混乱,在这个假设下,职员类里的每个方法都要if else判断是哪种情况,从类结构上来说将会十分臃肿。

开放封闭原则(OCP)

一个模块在扩展性方面应该是开放的而在修改性方面应该是封闭的。对象或实体应该对扩展开放,对修改封闭。

比如更改封闭即是在我们对模块进行扩展时,勿需对源有程序代码和DLL进行修改或重新编译文件!这个原则对我们在设计类的时候很有帮助,坚持这个原则就必须尽量考虑接口封装,抽象机制和多态技术!

里氏替换原则(LSP)

子类应当可以替换父类并出现在父类能够出现的任何地方。比如:公司搞年度晚会,所有员工可以参加抽奖,那么不管是老员工还是新员工,总部员工还是外派员工,都应当可以参加抽奖,否则这公司就不和谐了。

依赖倒置原则(DIP)

高层次的模块不应该依赖于低层次的模块,他们都应该依赖于抽象。具体实现应该依赖于抽象,而不是抽象依赖于实现。

可以这样理解,上面我举例子的时候先说了兔子和羊,然后才推出食草动物。但如果我们继续认识了牛、马等食草动物,我们会发现我们需要不断调整食草动物的描述,这样程序会变得僵化,所以我们不应该让子类依赖于实体,不应该让父类模块依赖于子类模块。所以我们需要将食草动物设计为抽象类,即抽象类或接口。这样下层只需要实现相应的细节而不会影响父类。

接口隔离原则(ISP)

模块间要通过抽象接口隔离开,而不是通过具体的类强耦合起来。客户端不应该依赖它不需要的接口。一个类对另一个类的依赖应该建立在最小的接口上。

比如,为了减少接口的定义,将许多类似的方法都放在一个接口中,最后会发现,维护和实现接口的时候花了太多精力,而接口所定义的操作相当于对客户端的一种承诺,这种承诺当然是越少越好,越精练越好,过多的承诺带来的就是你的大量精力和时间去维护!



参考1: https://www.cnblogs.com/xiesong/p/10399273.html

参考2: https://www.cnblogs.com/fzz9/p/8973315.html#%E3%80%80%E3%80%803多态

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342