面向对象学习笔记

本文介绍了面向对象设计的基本概念,包括访问器方法的作用、软件开发的三个视角、面向对象的关键术语等,并探讨了如何通过重构改进代码结构而不改变其功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


★访问器方法 (accessor method)

1. 使用访问器方法取代对实例变量的直接访问。
访问器方法的使用可以让类的用户在不改变代码的情况下完成三件事:
a. 对变量的值加以约束(如让 Car 类的 SetSpeed 方法拒绝负的速度);
b. 改变内部的数据结构(如在内部从英制单位改为公制单位,同时依旧保持 getSpeedInMPH 和 getSpeedInKPH 方法);
c. 在值发生改变时自动执行边界效应(比如:在调用 setPosition 时自动更新用户界面)。
2. 持续性的值应该通过 getXxx 和 setXxx 方法来访问

★软件开发过程中的三个视角:

视角:概念(conceptual)
描述:这个视角“展现了问题领域中的概念……一个概念模型可以在对实现软件有很少或毫无注意的情况下画出……”

视角:规格(specification)
描述:“现在我们看看象软件,但我们只看软件的接口,而不看实现。”

视角:实现(implementation)
描述:现在,我们置身于代码本身。“这可能是最常用的视角,但在许多方面,规格视角经常是更好的视角。”

在面向对象范式中,你必须问题从三个视角层次来考虑你的问题。

★面向对象术语

对象(object):
负有责任的一个实例。为了实现它,我要(用代码)编写一个类,在其中定义数据成员(与对象相连的变量)和方法(与对象相连的函数)。

类(class):
方法的容器。定义对象的数据成员。代码将围绕类来组织。

封装(encapsulation):
经典的定义是数据隐藏,但将它想成任何形式的隐藏则更好。

继承(inheritance):
让一个类成为另一个类的特殊类型。这些特殊化的类被称为基类(初始类)的派生类。基类有时也被称为超类,此时派生类被称为子类。

实例(instance):
一个类的特定的例子(一定是一个对象)。

实例化(instantiation):
创建一个类的实例的过程。

多态(polymorphism):
可以用统一的方式访问一个类的不同派生类,但得到的行为取决于所访问的对象所属的派生类。

视角(perspecive):
有三种观察对象的视角:概念视角、规格视角和实现视角。三个不同的视角有助于我们理解抽象类与其派生类之间的关系。抽象类定义了概念层次上解决问题的方法。它还给出了与任何派生对象通信的规格。每个派生类都按照自己的需要提供这个规格的实现(参见:软件开发过程中的三个视角)。

★重构
不增加功能的前提下修改代码来改进代码结构。
Martin Fowler 下的定义:
重构是这样的修改软件系统的过程:不改变代码的外在行为而改善它的内部结构。

★设计
    设计者应观察问题领域、识别出现的名词并创建对象来表现它们。然后,设计者转而寻找与名词相关的动词(即对象的行为)并通过向对象添加方法来实现它们。然而,这样将注意力集中于名词和动词的过程通常会导致比希望的更庞大的类体系。
    在创建对象时用共同点/变化点分析作为主要工具,这是比“仅仅观察名词和动词”更好的方法。在创建设计以处理变化的过程中,应该遵循两条基本策略:
    1. 发现并封装变化点;
    2. 优先使用对象组合而不是类继承。
    优先使用对象组合的目的是在独立的类中包含变化点,从而使未来的变化不会影响现在的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值