艾伟_转载:面向对象封装了啥

简介:   面向对象封装了变化,或者更加准确的说,应该是封装了不变的地方,留出了变化的地方可以在需要的时候再去变,那么什么地方会变化呢?1、数据的变化  比如一个工厂生产一种纸盒子,程序要计算它的体积,需要有长、宽、高的尺寸,盒子的尺寸是固定的,那么在代码里面直接硬编码,比如长1,宽2,高3,方法返回1*2*3,甚至直接返回6,没有任何问题。

  面向对象封装了变化,或者更加准确的说,应该是封装了不变的地方,留出了变化的地方可以在需要的时候再去变,那么什么地方会变化呢?

1、数据的变化

  比如一个工厂生产一种纸盒子,程序要计算它的体积,需要有长、宽、高的尺寸,盒子的尺寸是固定的,那么在代码里面直接硬编码,比如长1,宽2,高3,方法返回1*2*3,甚至直接返回6,没有任何问题。现在需求发生了变化,这个工厂生产两种尺寸的盒子,另一种长222,这时候变化的就是数据。使用变量来抵御数据的变化。我现在只要在计算体积的方法里设长宽高三个参数,在方法里返回长**高就可以了。这里不变的是计算体积的过程、长宽高的变量,变化的是计算用到的数据。

2、过程的变化

  现在厂家又生产了另一种底面是三角形的三棱柱盒子,这时候原来计算体积的公式就不好用了。这里注意了,计算体积的这个过程是要的,但是这个过程怎么实现需要变化了。使用继承和重写来抵御过程的变化。可以把计算体积的方法变成一个虚方法,然后在继承的类里面重写它,返回长**/2。这里不变的是,必然会需要计算体积的这种行为,而这个行为的过程是变化的,行为需要的数据值也是变化的。

3、参数的变化

  厂家生产了第三种产品,底面积是圆形的,圆柱形的盒子。这时候需要的参数不是长宽高了,而是半径和高两个变量。这时候计算体积的方法已经不能用原来传入三个参数了。使用属性来抵御参数的变化。这时候我们在抽象的父类里面只要提供计算体积的无参数方法,然后在子类里面自定义不同的属性就可以了。比如在长方体盒子子类里定义长宽高、在圆柱形盒子子类里定义半径和高。等等。

4、行为的增加

  现在又有第二家工厂来找我们做程序了,它们计算体积时除了盒子的体积后还需要在加一个包装的体积。然后第三家工厂需要在体积上乘以一个1.05的材料消耗系数。虽然它也可以用继承来抵御变化,但是它并不是纯粹的计算盒子的体积了。而且各种厂家行为古怪,无法预知会有什么样子的行为变化。用事件来抵御行为的增加。在计算盒子体积的方法里面引发一个计算盒子体积后的事件,让处理事件的人可以得知计算的参数以及计算的结果,并且可以改变它。那么在为第二、三家工厂做程序时候,就可以在计算盒子体积的事件里面处理新的行为。在这里不变的仍然是需要计算体积这种行为,变化的是在这种行为后会有很多附加的行为,而且是未知的。

目录
相关文章
|
7月前
|
存储 编译器 数据安全/隐私保护
【软件设计师备考 专题 】面向对象开发方法:理解类、对象和封装
【软件设计师备考 专题 】面向对象开发方法:理解类、对象和封装
110 0
|
Java 编译器 数据安全/隐私保护
【Java面向对象编程(中)】- 探索封装的秘密
【Java面向对象编程(中)】- 探索封装的秘密
66 0
|
3月前
|
设计模式 存储 算法
《设计模式:可复用面向对象软件的基础(典藏版)》
本书是埃里克·伽玛著作,涵盖180个笔记,主要介绍面向对象设计模式,包括MVC、设计模式编目、组织编目、实现描述、复用机制、运行时与编译时结构关联、设计支持变化等方面。书中详细解释了23种设计模式,如Abstract Factory、Adapter、Bridge、Builder等,按创建型、结构型、行为型分类,旨在提高软件可复用性和灵活性。
210 0
《设计模式:可复用面向对象软件的基础(典藏版)》
|
7月前
|
Java 数据安全/隐私保护
Java面向对象编程:封装技术详解
Java面向对象编程:封装技术详解
82 0
|
存储 安全 C#
C#OOP之四 深入理解方法
C#OOP之四 深入理解方法
42 0
|
7月前
|
Serverless PHP
当谈论面向对象编程时,这四个概念是非常重要的。以下是对接口、继承、封装和多态的简要说明
本文介绍了面向对象编程的四个核心概念:接口、继承、封装和多态。接口定义对象的行为规范,类通过实现接口确保符合所需行为。继承允许在已有类基础上创建新类,实现代码重用。封装是将数据和操作捆绑并隐藏内部细节,提高安全性和可维护性。多态使对象在运行时能表现出不同行为,增加代码灵活性和可扩展性。文中还提供了代码示例来说明这些概念。
51 0
探秘面向对象编程:封装、继承、多态的精髓与实践
探秘面向对象编程:封装、继承、多态的精髓与实践
|
编译器 C语言 C++
【C++要笑着学】面向对象总结 | 瞎编的C++小故事 | 再次理解封装 | 再次理解面向对象
我是柠檬叶子C。本篇将对之前讲的面向对象的内容进行一个梳理,通过举一些例子去感受C和C++之间的区别和联系。举了一个比较有意思的胡编乱造的故事(bushi)。文章的最后会再次理解一些概念,强调封装的意义,加深对 "面向对象" 的理解。如果觉得文章不错,可以 "一键三连" 支持一下博主!你们的关注就是我更新的最大动力!
163 0
【C++要笑着学】面向对象总结 | 瞎编的C++小故事 | 再次理解封装 | 再次理解面向对象
|
C++
爱上c++的第二天:类和对象的三大特性-封装
对只写权限,我们可以检测数据的有效性(不能让用户修改程序,即用户不能访问内部程序,以防用户进行非法操作)
114 0
|
Java 开发者 设计模式
接口的魅力:全能的世界蓝图 | 带你学《Java面向对象编程》之五十九
本节旨在为读者展现接口的全能性与其独有的功能:制定标准。
接口的魅力:全能的世界蓝图   | 带你学《Java面向对象编程》之五十九