前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向对象编程:对象之间的关系类型

面向对象编程:对象之间的关系类型

作者头像
程序你好
发布2018-07-20 15:39:47
1.5K0
发布2018-07-20 15:39:47
举报
文章被收录于专栏:程序你好程序你好

介绍

对象之间的关系定义了这些对象如何交互或协作来执行应用程序中的操作。在应用程序中,用户界面类的对象都与业务层对象交互,以执行操作。在后台,业务层对象可能与职责库对象交互,而职责库的对象又与数据源对象或服务对象进行交互。

案例研究

在继续之前,让我们假定一个客户订单管理应用程序,该应用程序管理客户为某些产品下的订单。每个订单可以有一个或多个产品。第一步是从给定的描述中挑选出独立的类。使用单一责任原则可以派生以下类。

Customer -表示可以为任何产品下订单的客户

Address—表示客户的地址或订单的发货地址

Order——表示客户下的订单

OrderItem——表示客户为其放置订单的产品

Product-代表产品本身

CustomerRepository——这个类负责从数据源保存或读取客户信息。

OrderRepository—这个类负责从数据源保存或读取订单信息

ProductRepository——这个类负责读取或保存产品信息。

面向对象编程中的基本关系类型是,

协作

聚合

继承

让我们更详细地研究它们。

协作

协作关系有时被称为“使用”关系。当一个对象使用另一个不相关的对象来完成一个操作时,两个对象被称为协作。

在我们的应用程序中,为了保存和检索客户详细信息,CustomerRepository使用客户对象对数据源进行保存和读取。类似地,其他存储库类(如ProductRepository和OrderRepository)分别使用Product和Order对象,因此被称为协作执行操作。

代码语言:c++
复制
public class CustomerRepository  
{  
 // Retrieves a single customer 
 public Customer Retrieve(int customerId)  
    {  
 // create an instance of the Customer Class 
        Customer customer = new Customer(customerId);  
 
 // code that retrieves the defined Customer 
 // populate the customer object and return 
 
 return customer;  
    }  
}

在CustomerRepository类中,您必须注意到,存储库CustomerRepository从数据源检索客户详细信息,保存客户信息。

聚合

组合关系有时被称为“Has a”的关系。在这种关系中,对象可以由一个或多个对象以其属性的形式组成。以下是一些可以从给定的应用程序描述中得出的事实:

每个客户都有一个地址,订购的产品将在该地址装运

每个订单都有一个客户、一个送货地址和一个以OrderItem表示的产品

从上面的事实可以很容易地得出,我们的Order类对象由Customer、Address和OrderItem对象组成。OrderItem对象进一步由Product类对象组成。Order类将这些对象组合为其属性,

如下面的代码所示,

代码语言:c++
复制
public class Order  
{  
 
 public Customer Customer { get; set; }  
 public Address ShippingAddress { get; set; }  
 public List<OrderItem> OrderItems { get; set; }  
}  

组合

组合是一种特殊的聚合关系,在这种关系中,组件部分不存在,只是作为组成部分的一部分。

例如,在我们的应用程序中,Order类的对象由一个客户和一个OrderItem组成。如果我们打破订单和客户类之间的关系,客户类仍然可以退出。但是,如果Order类和OrderItem类之间的关系被破坏,那么OrderItem类就不存在。

假设我们的应用程序的功能将来会发生变化,现在它不再接受产品订单,而是为现有客户提供一些其他服务,比如消息传递服务。在这个场景中,Order类现在将不再有用。但是,曾经由Order类组成的Customer类在没有它的情况下仍然存在。相反,OrderItem类不能。

Order和OrderItem类之间共享的关系类型称为组合关系。

继承

继承本身就是一个需要讨论的大话题。在这里,我们不讨论不同类型的继承以及如何在代码中实现它。我们只讨论继承作为一种关系。

继承有时被称为“is”关系。在这种关系中,一个类继承另一个类的成员。继承的类被称为基类,而继承类被称为派生类。由于派生类具有基类的成员,因此可以认为派生类是基类的子类型。派生类可能有也可能没有继承类之外的成员。

假设我们的应用在市场上运行得很好。鉴于此,产品所有者现在希望在应用程序中添加一个新特性,以监视具有高需求的产品类型。从新的需求中,很明显,我们必须创建产品类的子类型。这些子类型将表示现实世界中的特定产品类别,

如下图所示。

如上图所示,类MusicAlbum和Book有它们自己的一些属性。因为它们从Product类继承,所以它们也继承了它的属性。可以说,音乐是一种产品,书也是。

我希望这能帮助您对对象关系有一个基本的了解。欢迎您对本文提出任何反馈、问题或评论。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-06-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序你好 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档