标签: 封装
访问修饰符
面向对象语言将程序划分为称为类的模块。每个类都包含特性,这些特性由数据(字段)和方法组成。(并非所有语言都使用这些术语,但为了便于理解,我们将使用它们。)语言对其他类可以访问类的哪些特性有各种规则,这些规则通常基于适用于类的访问修饰符。
设计继承
面向对象领域中持续时间最长的争论之一是开放继承和设计继承之间的争论。设计继承的原则可以用Josh Bloch的话来概括:“为继承而设计和编写文档,否则就禁止它”。使用这种方法,您需要注意决定哪些方法可以继承,并密封其他方法以防止它们被覆盖。
函数作为对象
在编程中,对象的根本概念是数据和行为的捆绑。这在编写一组相关函数时提供了一个通用的数据上下文。它还提供了一个操作数据的接口,允许对象控制对该数据的访问,从而更容易支持派生数据并防止对数据进行无效修改。许多语言都提供了显式语法来定义类,这些类充当对象的定义。但是,如果您使用的语言具有一流的函数和闭包,则可以使用这些结构来使用函数作为对象模式(最初由Eugene Wallingford描述)创建对象。
Getter消除器
当他们看到一个getter方法时,你可以通过他们嘴角左侧的抽搐来识别他们,他们会迅速地拔出他们的战斧,并发出一声满意的叫喊,因为另一个getter被无情地从一个类中砍了下来,这个类立即在男子气概的Getter消除器的脚下欣喜若狂地昏厥过去。
可观察状态
当人们说一个方法不会改变对象的 observable 状态时,是什么意思?
页面对象
当您针对网页编写测试时,您需要引用该网页中的元素,以便单击链接并确定显示的内容。但是,如果您编写的测试直接操作HTML元素,那么您的测试将很容易受到UI更改的影响。页面对象使用特定于应用程序的API包装HTML页面或片段,允许您在不深入HTML的情况下操作页面元素。
表示域数据分层
对信息丰富的程序进行模块化的最常见方法之一是将其分为三大层:表示层(UI)、域逻辑层(又称业务逻辑层)和数据访问层。因此,您经常会看到Web应用程序被分为Web层、业务逻辑层和数据访问层,Web层负责处理HTTP请求和渲染HTML,业务逻辑层包含验证和计算,数据访问层负责解决如何在数据库或远程服务中管理持久性数据。
受保护数据
在我的类中使用protected访问修饰符来处理数据是好的OO设计吗?
公共C#字段
当我第一次接触C#时,我从一开始就喜欢上了属性的概念。C++/Java中的getX和setX约定对我来说总是显得有点愚蠢,写成obj.X = other.X
要自然得多。提供一个带有get和set方法的属性,将一个常见的约定变成了该语言自然支持的特性。
已发布接口
已发布接口是我使用的一个术语(首先是在重构中),指的是在定义它的代码库之外使用的类接口。因此,它比Java中的public意味着更多,甚至比C#中的非内部public意味着更多。在为IEEE软件撰写的专栏文章中,我认为已发布和公共之间的区别实际上比公共和私有之间的区别更重要。
密封
密封方法或类会阻止子类覆盖它。
自我封装
数据封装是面向对象风格的核心原则。这意味着对象的字段不应公开,而所有来自对象外部的访问都应通过访问器方法(getter和setter)进行。有些语言允许公开访问字段,但我们通常告诫程序员不要这样做。自我封装更进了一步,它表明对数据字段的所有内部访问也应该通过访问器方法进行。只有访问器方法才能触碰数据值本身。如果数据字段没有暴露给外部,这意味着要添加额外的私有访问器。
软件组件
自从我进入这个行业以来,将软件开发从费力地编写代码转变为通过简单地组装组件来构建强大的系统的想法一直是一个目标。这是一个有时可以看到但从未真正实现的目标——尽管许多技术都悬挂着工业重用的诱人前景。
告诉,不要询问
告诉,不要询问是一条原则,它可以帮助人们记住,面向对象是关于将数据与其操作函数捆绑在一起的。它提醒我们,与其向对象询问数据并根据这些数据采取行动,不如告诉对象该做什么。这鼓励将行为移动到对象中,以与数据保持一致。
统一访问原则
模块提供的所有服务都应该通过统一的表示法来访问,这种表示法不会泄露它们是通过存储还是通过计算来实现的。
——Bertrand Meyer
Bertrand Meyer在他极具影响力的著作《面向对象的软件构建》中提出了这一原则。
该原则的要点是,如果您有一个person对象,并且您询问它的年龄,那么无论年龄是对象的存储字段还是计算值,您都应该使用相同的表示法。这实际上意味着person的客户端不应该知道也不应该关心年龄是存储的还是计算的。