Java 中的对象模型
对象模型概述
您是否曾想过软件程序如何查看和与组成它们的组件进行通信?
对象模型在这种情况下很有用。借助强大的系统或接口,开发人员可以使用复杂的面向对象技术将这些组件表示为对象。
对象模型实际上对软件开发至关重要,以至于它通常是第一阶段之一。对象模型通过定义继承和封装等关键特性,为可靠、适应性强且可扩展的应用程序设计建立了框架。您准备好学习更多有关面向对象编程的知识了吗?
对象和类
Java 或任何其他面向对象编程语言的面向对象范式都依赖于对象和类。让我们更仔细地研究它们,看看它们到底是什么 -
对象
在面向对象编程中,对象相当于现实世界中的元素,无论是物理元素还是概念元素,都具有独特的属性。
以下是对象的一些定义特征 -
唯一- 每个对象都不同于系统中的所有其他对象,具有自己的属性和行为。
状态- 每个对象都有一个状态,表示其当前属性和特定于该特定对象的值。
行为- 对象的行为是指它可以采取的操作以及它如何与其他对象交互,包括内部和外部交互。
例如,一个人可以表示为物理对象,而流程或产品可能更适合表示为概念对象。
类
类是对象的蓝图或模型,用于描述具有相似特征的对象集合。这些东西被称为类的实例。类中有多个元素 −
对象属性中保存的信息可能因属于同一类的不同对象而异。类数据是这些特征的名称。
操作是用于指定和描述这些对象活动的程序和技术。
例如,考虑"员工"类。以下特征可适用于此类 -
员工的经验
员工所在的部门
学生作为员工开始工作的年份
个人信息,例如员工姓名、员工 ID 和出生日期。
使用此类,您可以执行许多操作,包括 -
averageyears() - 计算员工平均经验年限。
totalyears() - 计算员工的总经验年限。
算法
步骤 1 -创建"Employee"公共类。
步骤 2 - 使用两个数字 2 和 4 调用"total_years"函数来添加员工经验总数。
步骤 3 - 然后我们调用另一个名为"avg_years"的函数,使用"total_years"的结果和整数 2。此函数计算两个数字的平均值。它以十进制形式返回结果。
步骤 4 - 程序使用 System.out.println 方法将结果打印到控制台。
步骤 5 - 输出显示总工作年限,即 6。两个数字的平均值为 3.0。
示例
以下代码定义了一个"Employee"类,用于计算两个员工的总工作年限和平均工作年限,并将结果打印到控制台。
import java.io.*; public class Employee { public static void main (String[] args) { // 将参数传递给函数 int tot = total_years(2,4); double avg = avg_years(tot, 2); // 打印输出 System.out.println("总年数 = "+tot+"。平均年数 = "+avg+"。"); } // 计算总数的函数 public static int total_years(int executive, int senior) { int total = executive + senior; return total; } // 计算平均年数的函数 public static double avg_years(int total, int num_subs) { double avg = total/num_subs; return avg; } }
输出
总年数 = 6。平均年数 = 3.0。
封装和数据隐藏的概念
为了确保我们的数据安全并且不易受到外界干扰,封装和数据隐藏是必须实现的基本概念。
封装涉及将方法和属性组合在一个类中。只有当类为其提供接口时,才允许外部访问内部细节或类属性。
另一方面,数据隐藏是保护对象不被外部方法直接访问的过程。
许多对象需要能够相互通信才能创建交互式应用程序。这种通信通过消息传递来实现,这需要在由各种进程创建的对象之间调用类方法。在大多数情况下,消息传递是单向的,并允许两件事之间进行通信。
继承
通过使用继承的基本概念,可以从具有更广泛功能的现有类中创建新类。初始类通常称为父类、基类或超类,而新类称为子类、派生类或子类。
只要超类允许,子类可以继承或获取其超类的特征和功能。此外,子类可以修改任何继承的超类方法,以及引入自己的新特征和方法。
由于继承在父类和子类之间建立了"is-a"关系,因此它为程序员提供了开发面向对象应用程序的强大工具。
例如,您可以使用 Reptile 类作为蓝图来创建 Crocodile、Snake 和 Chameleon 等类。除了爬行动物的共同特征外,每种动物都有独特的特征。因此,说鳄鱼"是"爬行动物是正确的。
多态性
"多态性"一词源于希腊语,指的是呈现多种形状的能力。它指的是在面向对象编程的上下文中,操作根据所应用的对象类型采取不同行动的能力。
这使得它在继承中特别有用,因为它使具有各种内部结构的对象能够共享一个通用接口。
让我们使用 Triangle 和 Rectangle 这两个类作为例子。这两个类都包含一个名为 findArea() 的方法。
尽管这两个类中方法的名称和目标相同,但它的内部实现方式(即面积计算方式)因类而异。
当 Rectangle 类的对象运行其 findArea() 函数时,它不会干扰 Triangle 类的 findArea() 方法计算圆的面积。
泛化和特化
在类层次结构中,子类从超类继承,这反映在泛化和特化中。
在泛化过程中,子类被连接起来形成一个广义的超类,合并类的共享特征以生成层次结构更高级别的类。
它表明了一种"是一种"关系。
例如,"自行车是一种陆地交通工具"或"船是一种水上交通工具。"
与泛化相反的是特化过程。在这种情况下,使用项目组的识别特征从预先存在的类中创建专门的类。您可以将子类视为超类的专门版本。
链接和关联
链接和关联用于表示对象之间的关系。链接表示对象之间的连接,通过该连接它们进行协作。关联是一组具有共同结构和行为的链接,表示一个或多个类的对象之间的关系。
关联度表示链接的类数。
关联的基数比表示参与关联的实例数。
聚合和组合
聚合或组合是类之间的关系,其中一个类可以由其他类的对象的任意组合组成。
现在可以将对象直接放置在其他类的主体内。
聚合被称为"部分"或"具有"关系,具有从整体导航到其部分的能力。聚合实体由一个或多个其他对象组成。
结论
由于它使开发人员能够使用面向对象技术将组件表示为对象,因此对象模型是软件开发的关键部分。通过构成面向对象范式基础的对象和类,Java 使用对象模型。对象模型中提高应用程序适应性、可扩展性和稳健性的关键思想包括封装、数据隐藏、继承和多态性。通过掌握这些思想,开发人员可以提出更有效、更高效、更通用的软件应用程序。