对象
现代软件分析和设计的许多力量和灵活性来自于对对象的使用。
对象的使用使设计者能够创建更容易维护和扩展的程序。而且,它使设计非常复杂或大规模的程序变得更加容易。
在编程中使用对象的好处是,它们使我们能够更准确地模拟真实世界。
程序性编程将世界表现为一系列作用于数据的过程。
然而,面向对象的编程以我们真正看到的方式表示它--作为一组相互作用的对象。
用例和问题陈述允许你定义你正在分析的问题域。
在用例和问题陈述被创建之后,你需要对问题域的实际行为进行建模。
通过使用对象,你可以将问题域的特征转化为可用于创建软件的概念模型。
因此,创建对象通常是设计项目的下一个阶段,在用例或问题陈述被起草之后。
一个对象是一个独特的实体,它代表了问题域中一些重要的东西。
它有明确的边界。它有一个明确的行为和明确的目的。
类
类是创建对象的模具或模板。它们为它们所包含的对象的行为设定了规则。
类是一个程序的抽象结构的一部分,在程序创建时被创建。
但是,对象只有在程序运行时才会被创建。与类相反,它们存在于一个明确的时间点上。
将对象分组到一个类中,可以简化你所建模的问题。
类创建了一个世界的抽象表示,让你抛弃了不必要的细节。
一个类包括具有类似
- 属性
- 行为
- 与其他对象的关系
你将对象归入类的方式取决于你所建模的问题。
不同的问题域有不同的要求,即使它们包含相同的对象。你将需要创建适合每个问题域需求的特定类。
例如,以下是与银行应用域相关的对象。
- 银行出纳员
- 经理
- 客户
- 自动取款机
- 计算机
- 主机
为了对银行的不同方面进行建模,你需要创建一些类来捕捉问题域的基本特征。
因此,一个名为ComputerSystem的类将捕获ATM、计算机和银行主机的基本特征。
另外,如果你想更详细地分析问题域,你可以为这些对象中的每一个创建单独的类。
比方说,你想对用户与银行计算机系统的交互方式进行建模。
你可以创建一个类来模拟银行柜员、客户和经理的行为。而所有这些东西都将是ComputerSystemUser类的实例。
如果你想对银行的其他方面进行建模,你可能需要重新安排你所选择的类。例如,你可以创建一个名为Employee的类来模拟银行中员工的角色。
但是,如果你还想对银行的指挥系统进行建模的话,你就需要把它分成一个Employee类和一个Manager类。
状态
所有对象都有三个基本特征。
- 状态
- 行为
- 身份
一个对象的状态是由该对象的属性和这些属性的值来定义的。
属性是一个对象的特征,它把它与其他类型的对象区分开来。例如,任何汽车对象的属性之一是它能够移动--它有一个速度。
一个属性通常是静态的东西。这意味着,如果不改变它所属物体的基本性质,它就不能被移除或改变。
例如,一辆永远无法移动的汽车就不是一辆典型的汽车。
虽然属性本身通常是静态的,但一个属性所能拥有的价值通常是动态的。
所以你可以通过改变一个对象的属性值来改变它的状态。
行为和身份
你可以通过定义代表一个系统的对象的状态来模拟该系统的状态。但为了捕捉现实世界问题的复杂性,你还需要考虑这些对象的行为方式。
对象总是存在于与其他对象的某种关系中。
有时它们作用于其他对象,甚至作用于它们自己。而有时它们会被其他物体作用。
一个物体的行为方式是由其操作决定的。因此,当一个对象需要作用于另一个对象时--例如,检索数据--它使用一个操作。
当一个消息在两个对象之间传递时,操作就发生了,允许一些功能被执行。
出于结构和安全的原因,一个类或对象中的一些操作和属性对其他类是不可见的。
这可以保护一个程序免受恶意破坏。而且可以防止数据被计算机程序的其他部分意外地删除或覆盖。
一个类的隐藏部分只能通过该类的可见部分间接地被访问。
一个类的可见操作和属性共同构成了它的接口。这是一个类中被其他类或系统用户的操作所作用的部分。
一个类可以拥有的三种最常见的操作类型是
- 修改器
- 选择器
- 迭代器
修改器
修改器操作改变了一个对象的状态。
选择器
一个选择器操作让你访问一个对象的状态而不改变它。
迭代器
一个迭代器操作允许以确定的顺序访问一个对象的所有部分。面向对象的程序员经常创建一个单独的类,负责在一个对象上使用迭代器函数。
修改器、选择器和迭代器不是任何编程语言的一部分,而是用来描述操作所具有的效果。
创建和销毁一个类的实例需要两种类型的操作。它们是
- 构造器
- 销毁器
构造器
构造器操作创建一个对象并固定其初始状态。
毁灭器
解构器操作会销毁一个对象。
状态和行为共同定义了一个对象可能扮演的角色。而一个对象在其生命周期中可能扮演许多角色。
例如,银行的Employee类中的一个对象可以参与到工资系统、客户数据库或命令层次中。
你要求一个对象执行的功能就是它的职责。而一个对象的职责是由它的角色来完成的--由它的状态和行为共同完成。
因此,你可以通过指定一个对象的状态和行为来捕获其所有有意义的功能。
除了状态和行为之外,对象还具有第三个特征--身份。
即使是具有相同属性和行为的对象,也有其独立的身份。例如,同一制造商在同一年制造的两辆蓝色旅行车仍然是独立和独特的汽车。
一个物体的身份与它的属性或操作无关。因此,一个对象将保留其身份,无论其属性有什么值。
例如,你可以对你的汽车进行重新喷漆或安装另一个引擎,而它仍然是同一辆车。
总结
对象是抽象或真实事物的代表。它们在面向对象编程中的使用是为了让设计者准确地对世界进行建模。
对象代表事物的特定实例,而类代表对象的类型。不同的类用于不同的问题领域。
状态是对象存在的条件。一个对象的状态是由其属性定义的。一个对象的属性通常是静态的,而属性的值通常是动态的。
术语 "行为 "指的是对象如何相互作用,它由一个对象可以执行的操作定义。有五种操作:修改器、选择器、迭代器、构造器和解构器。不管它的属性和操作是什么,一个对象始终是唯一的自身。无论其状态或行为如何变化,它都能保持其身份。