面向对象的编程原理

哈Ha!我叫弗拉迪斯拉夫·罗丹(Vladislav Rodin)。我目前是OTUS的重型架构师课程的负责人,并且还教授软件架构课程。



特别是对于新课程“建筑与设计模式”课程的上课,我准备了另一篇作者的材料。






介绍



当涉及经典设计模式时,人们不禁会想到面向对象编程本身。毕竟,GoF模式完全是面向对象的编程模式。函数式编程具有自己的模式。



通常,一切安排如下:本身有面向对象的编程。他有原则。根据面向对象编程的原则,我们解析的GRASP模式遵循(作为一种选择-SOLID原则),而GoF模式又遵循这些模式。从中可以得出许多有趣的事情,例如企业模式。



面向对象范例



该定义指出:“面向对象的编程是一种编程范例,其中的基本概念是使用域标识的对象的概念。”



因此,系统被表示为主题区域的一组对象,它们以某种方式彼此交互。每个对象都有三个组成部分:身份,状态和行为。



对象的状态是其所有字段及其值的集合。



对象的行为是对象类的所有方法的集合。



对象身份是将一个类对象与另一个类对象区分开的对象。从Java的角度来看,equals方法是通过身份定义的。



面向对象的编程原理



面向对象的编程有很多原则。他们的号码的想法不同。有人声称其中有三个(程序员的老派),有人声称其中有四个(程序员的新派):



  1. 抽象化
  2. 封装形式
  3. 遗产
  4. 多态性


我建议更详细地讨论它们。唯一的事情是我建议不要考虑抽象,因为我认为自己处在程序员的老派中。



封装形式



与许多受访者(有时甚至是受访者)的观点相反,封装不是“所有领域都是私有的”。封装是软件设计的最基本原理,它的踪迹仅在微观级别可见,在宏观设计级别也可见。



科学定义指出“封装是原则,任何类,从广义上讲,系统的任何部分都应被视为“黑匣子”:类或子系统的用户应仅看到接口(即已声明的属性和方法的列表) ),而不是深入研究内部实现。”



因此,事实证明,如果类A直接访问类B的字段,则不是导致“违反了信息安全性”这一事实,而是导致类A与类B的内部设备相关联,并试图更改类B的内部结构。这将导致类A的更改。此外,类A不仅适用于类B的字段,它还根据某些业务逻辑工作。也就是说,使用类B的状态的逻辑位于类A中,而当我们要重用类B时,则无法做到这一点,因为如果没有某个类A,类B可能就没有用了,这将导致必须将类B与类A。将其推断到整个系统,结果发现只有整个系统可以重用。



封装是最被忽视的原理,不幸的是,很少有人正确地解释。它使您可以最大程度地减少类和子系统之间的链接数,从而简化类和子系统的独立实现和修改。



遗产



继承是从另一类派生一个类的能力,同时保留了祖先类(超类)的所有属性和方法,并在必要时添加新的属性和

方法。



继承是最被高估的原则。曾经有人认为“对于理想的程序员,继承树会达到无穷大并以绝对空的对象结尾”,因为一旦人们不太了解继承就是一种将现实世界的属性表示为层次结构的方法,而不是一种方法。通过从冰箱继承机器来重用代码,因为两个项目都有一个句柄。建议尽可能避免继承,因为继承是非常紧密的关系。为了减少继承级别的数量,建议构建“自下而上”的树。



多态性



多态性是在旨在用于祖先类的上下文中使用后代类的能力。



最可悲的定义的背后是编程语言分解任务并重构if和switch的能力。






All Articles