什么是面向对象

我认为面向对象编程的意思是以对象为基本单位进行编程,但是我觉得编写代码不是面向对象的根本,即使面向对象编程的特点也只是为了寻求一种编码方式,虽然这个编码方式达到了一些目的但是我觉得也只是面向对象的一些附属优势,而在具体就到了实现过程上,就成为了一种过程。所以面向对象是不能仅从一个方向去看待,而要从多方面去看:简单的是一种编程方式,复杂一些是一种设计,更上的则是一种思想理念。这些环节虽然都是面向对象但是对面向对象的使用可是天差地别。

1.面向对象的重点是分析和设计

我觉得面向对象的思想并不意味着就是面向类的实例编程同时也不光是实现那几个特点,而关键在于人们要进行研究的任何事物,所以我认为面向对象的重心应该在于怎么看待一个问题,然后去分析和设计,而不是去实现某一个功能,单纯的从编码角度去看待对象与对象之间的联系是片面的,因为对象之间联系的根本在于类之间的关系,基本的类之间的联系或者成为消息传递的对象,这些联系都依赖于最初的分析和设计(即什么成为类和类之间的关系),而不是后期的排布,所以面向对象思想的根本是为了分析设计。

2.面向对象的分析设计的需求是什么

面向的对象的根本是什么,我觉得是它要解决一个什么样的问题,这是一个关键。为什么出现面向对象,最后为什么面向对象的使用率逐渐增高,这是因为出现任何产品的递增都是因为出现了需求,那面向对象的需求是什么,是因为发现在预期时间内高质量的程序越来越难(我认为是因为随着应用面越广导致问题的复杂化和扩展性加强,导致之前的结构不在适用,使得每次开发都需要重头开始去分析设计一个需要耗费大量时间),为了让解决问题的方法更加的通用,所以我觉得面向对象的编码格式只是为了使代码的划分贴近于最开始的构思和之后的设计,所以分析设计的理念是尽量减少下一次的工作量同时出产高质量的程序。

所以面向对象是为了下一次更易于开发而出现的,所以编程语言更加对底层进行封装以减少考虑底层部分的问题并且减少工作量,使人尽量去以看待问题而不是关注于计算机底层运行的角度去分析问题,之后就是根据分析出的结果来进行设计,这时一个好的设计才能为之后的编码打下基础,只有好的设计才能体现出面向对象的优势,根据问题来设计在遇到下一个类似问题时可重用代码。这些优势就是良好的设计所带来的易维护,质量高,效率高,易扩展,可复用等,而这些就是根据设计和面向对象的特点体现出来的,根据类之间的关系是每一个部分都是可以拆分的独立个体,所以是类之间的关系尽量简单,使各类的功能更加精简。

抽象这是一个常见的词,在各种书里都很常见,在有的书里抽象作为面向对象的特点,而另一些则没有提到。我觉得首先面向对象本身就是抽象的,在进行分析的时候抽象的角度取决于所针对问题的目的,首先抽象的目的是为了建立类也就是说在进行第一步分析(首先分析了问题领域确定了客观事物即自然对象,之后根据问题进行分析找到问题方向就是要提供什么服务)后,针对这个服务进行抽象不是单纯的寻找共同点而是有目的向共性靠拢,这种抽象是为了设计铺路,抽象的越核心,越稳定,在这个系统里就越基础就像一个基石一样任何功能的扩展都在这上面完成,所以分析问题就是拆解问题得到不同大小的问题来确定抽象的层级,每次抽象都是一次封装,针对抽象出的类进行设计成符合服务要求的形式,我觉得抽象是一个系统中最基础的部分,它决定了设计的好坏,抽象的层次越高越通用而过高则没实际价值,在较高层次的抽象关系可以反映底层次的关系,这就是为什么上层类可以反应下层对象之间的关系原因。

一个系统因为基类可以明确主体,也因为基类才能去扩展。

3.如何进行符合要求的分析设计

首先,面向对象的思想就是看待问题的观点,即对一个问题的客观表示,而不是去对它进行实现。应该找到问题里的客观存在,而不是主观上的逻辑执行。对问题进行需求分析,将每个客体的需求关系理清,建立一个模型,这个模型里有客观存在的对象,然后针对它们去建立类,找到共同点去抽象成为父类。不能单独的看待一个问题,应该尽量以一个全局的视角去分析,比如什么还能用到这个问题,这个问题会引发什么样的新问题,在分析之初要考虑的很多,把问题要想广不能只局限于实现。

如何完成一个好的面向对象,首先是将自己的思维贴近一个分析的角度,这是一个关键的改变,不是从步骤解决问题而是去看问题中有哪些客观存在的点,就像解一道数学题先去分析已知什么未知什么而不是直接去想怎么求解(这是我的感觉没有找到比较合适的语句来描述,所以尽量意会),所以使用面向对象是为了不局限于计算机指令而去单独的思考问题,理清到底这个问题都包含了什么。问题是由人去解决的,而程序是由计算机解决的,人只看待问题而不去兼顾实现这时的结果才是人为处理问题的最优解,所以面向对象的编码过程就是起到从人的思维到计算机执行的一个过渡过程。如何能够将自己的代码组合成设计的理念则是第二步。

应该使用设计模式,这些设计模式是比较常用的面向对象的一种模型,同时尽量符合面型对象的原则

为什么使用设计模式,设计模式是从众多设计情况中抽象出的模型,是一种具备面向对象设计理念和设计优势的总结,这些总结因为不同的情况产生不同的情况种类,这些模式就像公式一样,使人们能够在更容易的达到设计的目的,完成开始的设计要求,这些模式在设计的过程中可以巧妙的填补结构上的缺口,使结构更加合理

就像设计成的框架就是设计好的可以复用的一组相互协作的类,成熟的设计都依靠各种结构之间的关系组合成为一个整体,而设计模式就是为了这个整体服务的,是为了快速设计而总结的理解。

设计模式的关键不是在于如何去补完其中的细节,而是意识到使用这些模式时重复出现的问题,如果不能很好的分析设计就不能正确的意识到问题

之前我认为面向对象是为了将人的思维从计算机上分离单独的思考问题,而现在我觉得应该思考的是一个事件,而每一个事件里都包含了诸多的问题(只是为了表明层次感,我觉得事件比问题的层次高一些),这些问题才是需要设计,要达到设计的目的,这些问题需要独立化,降低问题之间的耦合性,从而满足原则,这些问题才是应该抽象的,问题的核心不会变,要完成这一点就应该让问题依赖于抽象而不是实现,因为为了之后的需求变化将类中经常变化的部分从类中分离出去,这样设计是为了复用,抽象不拘泥于实现为的是之后改变,不必在意之后的实现避免所设计的类过于依赖(为了之后的实现)具体的实现,改变了设计的初衷,是为了更好的下一次开发去设计。

这些原则都是为了达到设计目标而出现的规则,比如位了代码复用,增加可维护性等等。

单一功能原则、开闭原则、里氏替换原则、依赖倒转原则、迪米特原则、接口隔离原则、聚合/组合复用原则

(1)单一职责原则:一个类只应该做和一个职责相关的事情,不要把过多的业务放在一个类中完成。

(2)迪米特法则:软件实体之间应该做到最少的交互。不要和陌生人说话。调用方只关心他需要使用的方法

(3)接口隔离原则:使用专门的接口,比用统一的接口要好。便于分工,在实现接口时,不应该看到自己不用关心的方法。

(4)开闭原则:软件实体应该对扩展开放,对修改关闭。开闭原则是设计原则的核心原则,其他的设计原则都是开闭原则表现和补充。实现开闭原则的方法就是抽象。

(5)聚合/组合复用原则。多使用聚合/组合达到代码的重用,少使用继承复用。

(6)依赖倒置原则:面向抽象编程,不要面向具体编程。

设计模式

(1)简单工厂模式

(2)策略模式

(3)开放-封闭原则模式

(4)单一职责模式

(5)依赖倒转模式

(6)装饰模式

(7)代理模式

(8)工厂方法模式

(9)原形模式

等等。。。。

这些都是如何更好的完成一个类或几个类之间的功能的模版

因为这些都是总结下来,可以达到设计目的的方法,都是针对面向对象的优势来进行的编码

所以不先去管实例化的对象和去设计类才是关键

从编程方式上来看如果只是简单的完成功能,对一个类的数据和针对数据的操作进行封装然后调用其中的方法,这只能叫做基于对象编程,就像编写或使用一个函数一样的使用一个类里的方法,要是在强一些使用好了继承、多态这些才算是面向对象的第一步,但是仅仅做到这样还是不够的,因为仅仅完成类内的部分,就算是代码写的漂亮也仅仅完成了逻辑上的过程依然是执行了一些步骤,即使编写的代码很好但是也只是完成了一个功能,我觉得这也并不符合面相对象的根本理念,这只是完成了面向对象编程,通过已经划分好的类去实现里面的功能。

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

推荐阅读更多精彩内容

  • 为什么要用面向对象?为了模拟现实世界 什么叫做面向对象面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发...
    Maxmin阅读 1,205评论 0 9
  • 因为它可能导致对同一块堆空间进行多次delete。当两个智能指针都指向同一个堆空间时,每个智能指针都会delete...
    Stroman阅读 3,997评论 0 0
  • 专有名词 css AST css 抽象语法树(abstract-syntax-tree) 。An AST is u...
    清水芦苇阅读 507评论 0 0
  • 站在大街上,喊一嗓子,谁没被骗过? 估计没有人回应。 因为生活里,谁还没被骗过啊。 买得套套说好超薄,戴上却没啥感...
    九燊阅读 213评论 0 0
  • 01 昨天我和姐姐去给我妈换了智能机,并帮她办好了网络。其实,是早就想给她做这些事情的,可每次都被她拒绝了。她的理...
    影子影阅读 1,544评论 22 69