4类和对象
4类图、对象图、包图
包图
概述:
一个"包图"可以是任何一种的UML图组成,通常是UML用例图或UML类图。包是一个UML结构,它使得你能够把诸如用例或类之类模型元件组织为组。包被描述成文件夹,可以应用在任何一种UML图上。
•论证类模型的设计:当设计了类模型时,你可以通过对象图来模拟出一个运行时的状态,这样就可以研究在运行时设计的合理性。同时,也可以作为开发人员讨论的一个基础。
•分析和说明源代码:由于类图只是展示了程序的静态类结构,因此通过类图看懂代码的意图是很困难的。因此在分析源代码时,可以通过对象图来细化分析。而对于开发人员,对于逻辑较复杂的类交互时,可以考虑画出一些对象图来做补充说明
对于对象图来说无需提供单独的形式。类图中就包含了对象,所以只有对象而无类的类图就是一个"对象图"。
在UML中,对象图使用的是与类图相同的符号和关系,因为对象就是类的实例。
对象图的用途
捕获实例和连接
在分析和设计阶段创建
捕获交互的静态部分
举例说明数据/对象结构
详细描述瞬态图
由分析人员、设计人员和代码实现人员开发
想象模式是概念上设计数据库的蓝图。在很多领域,你将想保存持久性数据到关系数据库活面向对象的数据库。你可以用类图为这些数据库模式建立模型。
类图(class diagram)
类(class)
接口(interface)
类之间的关系
依赖关系(Dependency)(客户提供者)
类这间的依赖关系表示某一类以某种形式依系用一条连接两个类的实线表示
关联有6种修饰:名称(Name)、角色(Role)、多重性(Multiplicity)、聚合(Aggregation)、组合(Composition)、导航性(Navigation)
C++语言程序设计实验4(类和对象)
是:用初始对象的每个数据成员的值,初始化将要建立的对象的对应数据成员。
构造函数和拷贝构造函数的声明格式如下:
class 类名
{
public: 类名(形参); 类名(类名 &对象名);
//构造函数 //拷贝构造函数
... ...
}; 类名::类名()
//构造函数的实现
{ 函数体;
} 类名::类名(类名 &对象名)
6. 本章小结
本章主要介绍了面向对象的基本概念、类和对象的声明、构造函数、析构函数、内联成 员函数、拷贝构造函数、类的组合。
类是面向对象程序设计中最重要、最基本的概念,也是学习面向对象方法时遇到的第 1 个难点。类是对逻辑上相关的函数和数据的封装,是对问题的抽象描述。
要理解类与对象,必须要结合实例来学习,读者可以思考:除了书中列出的例子,现实 世 界 中 还 有 哪 些 有 形 或 无 形 的 事 务 可 以 被 抽 象 为 程 序 中 的 类 ,每 个 类 又 存 在 哪 些 对 象( 实 体 )。 这样可以对类的概念了解的快一些。
本章开始的每章的最后有一个实例——人员信息管理程序,这个例子贯穿后续各章,利 用每章介绍的只是不断丰富程序的功能,建议课后仔细阅读、体会,并尝试修改、补充程序 的功能。
另外,本章中还介绍了利用 UML 语言表示类与对象的方法,以后各章还将进一步介绍 用 UML 语言表示类之间的关系,但这远不是 UML 语言的全部,这方面的内容也不是初学者 学习的重点,读者可以不必深究,了解一下就可以了。如果有需要,可以另外学习软件工程 的课程。
面向对象的程序设计目的是:实现软件设计的产业化。主要观点是认为自然界是由实体 (对象)所组成。程序设计的出发点是:使用面向对象的观点来描述模仿并处理现实问题。 他要求:高度概括、分类、抽象。
cpp04类和对象
Shenyang Aerospace University
28
内联成资料仅供员参考 函数举例(显式)
class Point
{
public:
void Init(int initX,int initY); int GetX( ); int GetY( );
private:
int X,Y;
};
Shenyang Aerospace University
注意:同一问题可能有不同的抽象结果——根据解决问题的要求不 同,产生的抽象成员可能不同。
Shenyang Aerospace University
7
简资料仅供单参考 的图书馆管理系统
系统功能需求
借阅者可以通过网络查询书籍信息和预订书籍 借阅者能够借阅和还书 图书管理员能够处理借阅者的借阅和还书请求 系统管理员可以对系统的数据进行维护,如增加、删
23
资料仅供参考
class Clock {
public: void SetTime(int H, int M, int S); void ShowTime( );
private: int Hour, Minute, Second;
};
Shenyang Aerospace University
24
资料仅供参考
20
资料仅供参考
类的成员
class Clock {
成员函数
public: void SetTime(int NewH, int NewM, int NewS); void ShowTime( );
private:
int Hour, Minute, Second;
}; 成员数据
Shenyang Aerospace University
4类和对象上
= "张三"; //为姓名赋值
std.age = 18;
//为年龄赋值
std.weight = 50;
//为体重赋值
std.dining();
//调用成员方法
System.out.println(std.weight);
std.walk();
System.out.println(std.weight);
” 如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他
们就是为windows写程序,而不是为Sun的设备写程序”
——Scott McNealy(Sun首席执行官)
定义类的语法
在Java中定义类
class 类名
在C中定义结构体
struct 结构体名
{ 成员列表
//包括成员变量和成员方法
属性
• 事物的属性在类中用成员变量表示 • 不同对象的各个属性都拥有其特定的值 • 属性名称由类的所有对象共享
学生对象
姓名 年龄 住址
属性
……
” 如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他 们就是为windows写程序,而不是为Sun的设备写程序” ——Scott McNealy(Sun首席执行官)
类与结构
• 最简单的理解方式:
C
Java
结构体
类
结构体变量
对象
区别在于:结构体一般只有数据(属性)而 没有函数(方法)。
” 如果十年前Sun没有做Java,人们便会写.Net程序,如果他们写.Net程序,他 们就是为windows写程序,而不是为Sun的设备写程序” ——Scott McNealy(Sun首席执行官)
4类与对象基础
声明一个引用变量时并没有对象生成
对象的创建
生成实例的格式: new <类名>() 例如: aclock=new Clock() 其作用是:
在内存中为此对象分配内存空间 返回对象的引用(reference ,相当于对象的存储 地址)
引用变量可以被赋以空值
例如:aclock=null;
3 数据成员
对类变量进行测试
public class ClassVariableTester { public static void main(String args[]) { Circle x = new Circle(); System.out.println(x.PI); System.out.println(Circle.PI); Circle.PI = 3.14; System.out.println(x.PI); System.out.println(Circle.PI); } }
public、protected、private 为存取控制符 static指明方法是一个类方法 final指明方法是一个终结方法 abstract指明方法是一个抽象方法 native用来集成java代码和其它语言的代码 synchronized用来控制多个并发线程对共享 数据的访问
格式说明(续)
编译后运行结果如下:
Circle@26b249 radius =0
解释
@之后的数值为x所指的对象的存储地址 x的值及对象的状态如图
例3
声明一个表示矩形的类 public class Rectangle { double width = 10.128; double height = 5.734; } public class ShapeTester { public static void main(String args[]) { Circle x; Rectangle y; x = new Circle(); y = new Rectangle(); System.out.println(x + " " + y); } }
项城建档立卡贫困户等4类重点对象
项城市建档立卡贫困户等4类重点对象农村危房改造工作实施方案一、目标责任全面贯彻落实党中央、国务院和省、市关于打赢脱贫攻坚战的相关要求,紧紧围绕“两不愁,三保障”中关于保障住房安全的战略部署,按照精准扶贫、精准脱贫的基本方略,把4类重点对象的农村危房改造放在优先位置,统筹规划、整合资源、加大投入、创新方法、精准实施,为切实做好我市建档立卡贫困户、低保户、农村分散供养特困人员和贫困残疾人家庭(以下简称4类重点对象)农村危房改造工作。
确保2019年之前完成我市现有4类重点对象的农村危房改造任务。
4类重点对象改造房屋的建筑面积原则上1口人户建30平米以内、2口人户建40平米;3口人以上户(含3口人)人均建筑面积不超过18平米,不得低于13平米。
各镇办严格按照文件要求的面积标准控制实施。
对于自筹资金和投工投料能力极弱、需要社保政策兜底脱贫的特困户,改造房屋面积按下限标准控制。
二、合理确定建设方式4类重点对象危房改造以农户自建为主,农户自建确有困难且有统建意愿的,各镇办要发挥组织、协调作用,帮助农户选择有资质的施工队伍统建。
各镇办要因地制宜,积极探索符合当地实际的农村危房改造方式,大力推广加固改造方式,优先选择加固方式对危房进行改造,原则上C级危房必须采用加固方式改造,拟改造农村危房属整体危险(D级)的拆除重建。
各镇办要积极探索创新农村危房改造模式,对自筹资金和投工投料能力极弱的特困户,通过建设农村集体公租房、利用闲置农房和集体公租房置换、提高补助资金额度等方式,兜底解决特困户住房安全问题。
三、严格控制建房面积完善居住功能保障安全和基本卫生条件。
4类重点对象的农村危房改造要符合村民住宅建设基本要求,执行最低建设要求,必须达到主要部件合格、房屋结构安全。
改造后的农房应配套卫生厕所、人畜分离等基本居住卫生条件。
开发推广低造价农房建造技术。
各镇办可编制符合安全要求及农民习惯的农房设计通用图集并免费发放到户,引导选择低成本改造方式,探索符合标准的就地取材建房技术方案,节约改造资金,提高居住功能。
实验4 类与对象基础实验(二)
实验4 类与对象基础实验(二)一、实验目的1.掌握String类与StringBuffer类2.掌握数组对象的使用3.掌握基本数据类型的包装类的使用二、实验内容1. 编程实现:解析身份证号码的生日。
2. 编程实现:字符串比较和转换。
3. 编程实现:解析身份证号码的地区。
4. 编程实现:数组操作。
三、实验步骤1. 编程实现:解析身份证号码的生日。
要求从键盘输入身份者号码字符串,将其中生日信息提取,并屏幕显示。
(身份证号码验证,只需要验证身份证号码为18位)。
运行效果如下:请输入你的身份证号码:1237123823身份证号码错误,请重新输入!3102301988050245558877身份证号码错误,请重新输入!310230************您的生日是:1988-05-022. 编程实现:字符串比较和转换。
编写一个Java应用程序,判断两个字符串是否相同,判断字符串的前缀、后缀是否和某个字符串相同,按照字典顺序比较两个字符串的大小关系,检索字符串,创建子字符串,将数字型字符串转换为数字,将字符串存放到数组中,用字符数组创建字符串。
public class StringExample {public static void main(String args[]){ String s1=new String("you are a student");String s2=new String("how are you");if(【代码1】) // 使用equals方法判断s1与s2是否相同{System.out.println("s1与s2相同");}else{System.out.println("s1与s2不相同");}String s3=new String("22030219851022024");if(【代码2】) //判断s3的前缀是否是"220302"。
类与对象的基本概念
例如,你在计算机上写一封信给你的同事John, 那么这封信本身是一个对象。它具有一般信所有的 共性。例如,有信的内容和允许你处理的一些方法 或动作(读信、写信、发信等)。
信的内容在计算机中称为数据,而需要处理的一些 方法和动作,在计算机里则统称为“操作”,将这 些信的共性汇集起来就有了对象这一概念。
可以由“信”这个类来定义两个类:“英文信” 和“日文信”,它们保留了“信”类的服务,并 添加上各自独立的服务。这种“保留”称为“继 承”。
“信”类称为基类,基类又可称为父类、超类或 泛化类。它具有一般信件的公共操作,读、写、 发送信。
“英文信”、“日文信”称为派生类,又可称为 子类或特化类。它们继承了其超类“信”和读、 写、发送等操作,但同时又加上它们自己的“英 文”和“日文”特定操作。
用计算机软件的术语可描述为公式
对象=数据+动作
所有的信的集合就构成了类,信中的内容不同(即 对象的属性值不同)。
类中的“信”都具有相同的服务:发信。发送英文 信和发送日文信的方式是一样的。
处理英文信和处理日文信有相同的方式,还有一 些各自独有的方式。那么,如果建立两套平行的 信件处理机制,显然是不经济的。
继承是一种联结类的层次模型,并且允 许和鼓励类的重用。
层次结构的上层(或祖先类)最具有通用 性。
下层部分,即后代具有特殊性。
类可以从它的祖先那里继承方法和实例变 量(即对象中可访问的数据),也可以 修改或增加新的方法使之更符合特殊的 需要。
1.2 消息与合作
一个对象内具有过程和数据。外部的用户或对象 对对象提出的请求,可以称为对该对象发送消息。
在强类型面向对象环境中,运行时系统保持所有多态 引用自动地和它们的动态类型相联结。
实验4 类和对象实验报告
实验4类和对象报告【实验目的】1.掌握类的构造方法;2.掌握对象的使用方法。
3.复习具有不同访问属性的成员的访问方式。
4.观察构造函数和析构函数的执行过程。
5.学习类的使用方法。
6.使用VC++的debug调试功能观察程序流程,跟踪观察类的构造函数、析构函数、成员函数的执行顺序。
【实验内容】1.声明一个名为Ellipse的结构体,其分量为椭圆的外切矩形的左上角与右下角两个点的坐标,并用它声明两个结构体变量,分别输入顶点坐标,计算并输出椭圆的面积;运行结果:实验遇到的问题:结构体的定义忘了,翻书后就ok了2.声明一个名为Ellipse的椭圆类,其公有的(public)数据成员为椭圆的外切矩形的左上角与右下角两个点的坐标;声明两个Ellipse类的对象,分别输入顶点坐标,计算并输出椭圆的面积;运行结果:3.声明一个名为Ellipse的椭圆类,其私有的(private)数据成员为椭圆的外切矩形的左上角与右下角两个点的坐标,声明公有的(public)成员函数访问椭圆的外切矩形的顶点坐标;声明两个Ellipse类的对象,分别输入顶点坐标,计算并输出椭圆的面积;运行结果:实验遇到的问题:暂时无太大的问题4,声明一个名为Ellipse的椭圆类,其私有的(private)数据成员为椭圆的外切矩形的左上角与右下角两个点的坐标,设计构造函数Ellipse(int,int,int,int)对椭圆的外切矩形的顶点坐标赋值,设计函数Area()计算椭圆的面积;声明两个Ellipse类的对象,计算并输出椭圆的面积。
实验遇到的问题:析构函数的构建不是太懂,查阅相关书籍后,基本上懂了。
5.定义一个类ClsName,要求该类设计如下:(1)该类有两个整型数据成员x和y;(2)为该类重载三个不同的构造函数:分别为无参数、带一个参数和带两个参数的构造函数,要求在构造函数中输出必要的信息以示区别;(3)设计2个成员函数用来读取数据成员x和y;(4)设计2个成员函数用来设置数据成员x和y;(5)设计1个成员函数用来在屏幕上打印输出数据成员x和y;(6)在main()函数中用三个不同的构造函数创建3个对象,并使用所有的成员函数对这些对象进行必要的操作。
JAVA 04类和对象
class TicketMachine { TicketMachine (int ticketCost) { ... } ... }
Constructor
构造函数 (cont’d)
JButton btnOK = new JButton(“确定");
缺省构造函数
如果一个类没有定义构造函数,则编译程序会帮我们 自动创建一个缺省构造函数 一旦我们定义了一个构造函数,就不会帮我们自动再 生成一个
Behaviors
例
Attributes:
String model Color color int numPassengers double amountOfGas
Attributes:
model = “Nissan" color = Color.LIGHT_GRAY numPassengers = 0 amountOfGas = 16.5
Foot Dance selection pulldown list
Dancer
Go / Stop button
Control panel
Dance floor
Positioning button Waltz, etc.
Dance step Dance group
类
类
• 类是对一组性质相同对象的抽象描述,概括了一组对象的共 同性质(数据成员)和行为(函数成员)。 • 用一个类可以定义出不同的对象,这种定义称类的实例化, 即对象是类的实例。
类的定义
class NameofClass { constructor1; constructor2; method1; method2; field1; //成员变量 //成员函数 //构造函数
实验4 类与对象(1)
实验4 类与对象(一)
(一)实验目的:
1.掌握Java类的结构、类的定义、方法和属性的定义以及对象的实现;
2.掌握类及其成员修饰符的使用;掌握构造函数的使用;方法的参数传递和返回值的
用法;
(二)实验要求
1. 正确地定义类、方法和属性;
2. 学会方法的参数传递和返回值的用法;
3. 熟练使用类及其成员修饰符;
4. 使用构造函数创建类的对象;
5. 程序应包括各个被调用方法的执行结果的显示。
6. 写出实验报告。
要求记录编译和执行Java程序当中的系统错误信息提示,并给出解
决办法。
(三)实验内容
1.编写3个基本类:Triangle, Ladder和Circle,分别用来刻画“三角形”、“梯形”和
“圆形”类;1个主类:Compute,负责计算每个形状的面积或周长。
具体要求:
•Triangle 定义3个变量:边长;和1个求周长的方法。
•Ladder 定义3个变量:上底,下底和高;定义1个求面积的方法。
•Circle 定义1个变量:半径;定义2个方法:求面积、求周长。
•3个基本类都要定义相应的构造方法,对变量进行初始化。
2.编写一个封装学生的类Student,
•包括属性:“学号”、“姓名”、“性别”、“年龄”;
•包括方法:“获得学号”、“获得姓名”、“获得性别”、“获得年龄”、“修改年龄”;
•另一个方法public String toString()把Student对象的所有属性信息组合成一个字符串,写程序检验这个功能。
4类重点对象认定标准
四类重点对象认定标准
一、贫困户
1.家庭成员中有失业、残疾、疾病等丧失劳动能力的人员,且无其他收入来
源。
2.家庭年收入低于当地规定的贫困线,且家庭财产符合当地最低生活保障标
准。
3.家庭中有在校接受全日制教育的子女,且家庭经济负担较重。
4.家庭成员中有大病患者,且家庭医疗费用支出较大。
5.其他需要认定为贫困户的情况。
二、失业人员
1.已办理失业登记,并符合当地规定的失业人员认定条件。
2.在一定期间内积极寻找工作,但未能找到合适的工作岗位。
3.家庭有特殊困难,如患有重大疾病、残疾等,需要照顾或抚养。
4.其他需要认定为失业人员的情况。
三、残疾人
1.经医疗机构鉴定,具有《中华人民共和国残疾人证》或经残联认定的残疾
人。
2.因疾病、事故等原因造成身体或精神上的残疾,影响其正常生活和就业。
3.家庭中有残疾人员,且家庭经济负担较重。
4.其他需要认定为残疾人的情况。
四、孤寡老人
1.无配偶、无子女或子女不在身边,无人照顾的老人。
2.家庭经济困难,无法负担养老费用。
3.身体状况较差,需要特殊照顾或护理。
4.其他需要认定为孤寡老人的情况。
类和对象的基本概念
类和对象的基本概念
类和对象是面向对象编程技术中的最基本的概念。
类(class)和对象(object)是两种以计算机为载体的计算机语言的合称。
其中,对象是对客观事物的抽象,类是对对象的抽象。
类是一种抽象的数据类型。
它们的关系是,对象是类的实例,类是对象的模板。
对象是通过new classname产生的,用来调用类的方法。
更多关于类和对象的基本概念,建议查阅计算机编程的相关书籍或咨询专业技术人员。
请注意,类和对象的概念在不同的编程语言中可能有所不同,但上述解释适用于大多数面向对象的编程语言。
《类和对象的概念》课件
明确类和对象的职责与属性
详细描述
在设计类和对象时,首先需要明确每个类和对象的职责和 属性,确保它们具有清晰、准确的功能定义。同时,要遵 循单一职责原则,避免一个类或对象承担过多的职责。
总结词
合理规划类和对象的继承关系
详细描述
在面向对象编程中,继承是实现代码复用的重要手段。合 理规划类和对象的继承关系,可以使代码结构更加清晰、 易于维护。同时,要注意避免过度继承和多重继承带来的 问题。
如何解决类和对象相关的常见问题?
总结词
解决类和对象的命名冲突问题
详细描述
在多个类或对象共存的情况下,可能会出现命名冲突的问题。为了避免这种情况 ,可以采用命名规范、命名约定等方式来避免命名冲突,提高代码的可读性和可 维护性。
如何解决类和对象相关的常见问题?
总结词
解决类和对象的内存泄漏问题
详细描述
02
通过封装,对象的属性和行为被隐藏在内部, 只通过外部接口与外界交互。
03
封装可以提高代码的安全性和可维护性,防止 外部随意修改内部实现细节。
继承
01
继承是子类继承父类的 属性和行为,子类可以 使用父类的所有非私有
属性和方法。
02
通过继承,子类可以扩 展和修改父类的功能, 实现代码的重用和扩展
。
《类和对象的概念》ppt课件
$number {01}
目录
• 类和对象的基本概念 • 类的特性 • 对象的创建和使用 • 类和对象的应用 • 类和对象的常见问题与解决方案
01
类和对象的基本概念
类的定义
总结词
类是对象的抽象,定义了一组具有相似属性和行为的对象。
详细描述
类是面向对象编程中的一个基本概念,它是对一组具有相似 属性和行为的对象的抽象。通过类,我们可以定义一组对象 的共同特征和行为,以及如何对这些特征和行为进行操作。
12-4类与对象练习题面向对象 (1)
A)成员函数一定是内联函数B)成员函数可以重载
C)成员函数可以设置参数的默认值D)成员函数可以是静态的
14. C++中对于结构中定义的成员,其默认的访问权限为()。
A)publicB)protectedC)privateD) static
15.为了使类中的成员不被类的对象通过成员操作符来访问,则不能把该成员的访问权限设置为()。
A、对象是类的一个实例
B、任何一个对象只能属于某个的类
C、一个类只能有一个对象
D、类与对象的关系和数据类型与变量的关系相似
3、下列关于构造函数的描述中,错误的是()。
A、构造函数可以设置默认参数
B、构造函数在定义类对象时自动执行
C、构造函数可以是内联函数
D、构造函数不可以重载
4、下列有关析构函数的说法中,()是错误的。
a.disp( );
return0;
}
该程序运行后的输出结果是()。
A)displB)disp2C)displdisp2D)程序编译时出错
24.若有以下程序:
#include<iostream.h>
classsample
{inti;
public:
voidsetvalue(intm){i=m;}
voidfun(intm){i+=m;}
staticints;
voiddis()
{
cout<<s<<endl;
}
};
intsample::s=0;
voidmain(){
samplea(2),b(5),c(a);
a.add();
类和对象的关系
类和对象的关系
什么是对象?
“万物皆对象”,通俗说:只要是客观存在的事物都是对象。
举例:⼈、⼿机、电脑、汽车、飞机等等,我们所看到的实物都可以称做对象。
什么是类?
“对事物的描述”,确定对象将会拥有的特征(属性)和⾏为(⽅法),它不是具体客观存在的东西。
举例:⾝⾼180cm,会做饭,会打篮球,有车有房有存款,对⼈体贴的30岁以下的男⽣。
我们可以把上⾯这个条件称作“类”,满⾜这个条件的男⽣就是具体的对象。
类的特点:
1.类是对象的类型;
2.类是具有相同属性和⽅法的⼀组对象集合(⼀个类可对应多个对象);
对象的属性:
就是对象具备的各种特征,⽐如上⾯条件中的“⾝⾼180cm,性别男⽣”,这就是对象的属性。
对象的⽅法:
就是对象执⾏的操作,⽐如上⾯条件中的“做饭,打篮球”。
总之,类是抽象的概念,仅仅代表事物的模板;
对象却是⼀个“看得见,摸得着”的具体的实体。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
什么是对象?
对象是现实世界中客观存在的事物 具有明确定义的边界和唯一标识的一个实体 状态和行为的一个封装体 某个类的一个实例
什么是类?
一个类是具有相同特征、约束和语义规范的 一组对象的抽象描述。 类是抽象的,而对象是具体的实例 类是静态的,而对象是动态的
类图
如何对类命名?
命名:简单名,路径:包名::子包::类名 语义:被建模系统的词汇表中提取的名词或名词短语。 语法:字符、数字、其它符号组成的字符串,首字符大写。 一个类就是一种新的类型。
属性是什么?
属性:对类中每个对象所包含的某一种数据或状态的抽象。 一个对象在特定时刻在每个属性上都有确定值。 语义:表示类的特征的名词或名词短语。 语法:可仅表示属性名,也可详细描述:类型、缺省值等。
什么是对象? 什么是对象? 路德维希·维特根斯坦 逻辑哲学论》 维特根斯坦《 路德维希 维特根斯坦《逻辑哲学论》
(Wittgenstein Tractatus Logico-Philosophicus)
世界可以分解为事实( The world divides into facts) 事实是由原子事实组成(atomic facts) 一个原子事实是多个对象的组合(objects) 对象是简单的(The Object is simple) 对象形成了世界的基础
}; class Nose { public:
void Smell(void);
}; class Mouth { public:
void Eat(void);
private:
Eye m_eye; Nose m_nose; Mouth m_mouth; Ear m_ear;
}; class Ear { public:
多态特性
多态性的一般性含义是,某一论域中的一个 元素可以有多种具体解释。编程语言中的重 载(overload)和类属(generic)都是支持多态性 的机制,而继承性是特有的另一种支持多态 性的机制。 多态性是进行抽象设计和抽象编程的重要手 段。一个软件系统中,抽象越丰富,适应变 化的能力就越强,也有利于合理使用。
单继承 多继承 抽象类
类的继承特性
规则1:如果类A和类B毫不相干,不可以为了使B的功能 更多而让B继承A的功能和属性。
class A { public: void Func1(void); void Func2(void); }; class B : public A { public: void Func3(void); void Func4(void); }; main() { B b; b.Func1(); //B从A继承了函数Func1 b.Func2(); //B从A继承了函数Func2 b.Func3(); b.Func4(); }
//Boy是Man的派生类
类的继承特性
继承的概念在程序世界与现实世界并不完全相同
class Bird { public: virtual void Fly(void);//鸟能够飞行 …… }; class Ostrich : public Bird //鸵鸟是鸟的一种 { public: virtual void Fly(void); //如何让鸟飞起来? …… };
规则3:若在逻辑 上B是A的“一种”, B A 并且A的所有功能和 属性对B而言都有意 义,则允许B继承A 的功能和属性。
类的组合特性
class Eye { public:
void Look(void);
若在逻辑上A是B的“一部分”(a part of),则不 允许B从A派生,而是要A和其他东西组合出B。
面向对象的基本特征
封装性 继承性 多态性
类的封装特性与信息隐藏
class WhoAmI { public: void getMyName(void); //名字是可以公开的 protected: oid getMyAsset(void); //财产是受保护的,只有我和继 承者可以使用 private: void getMyGuilty(void); //罪过是要保密的,只有我自 己才能偷看 … };
属性名[:类型[ = 缺省值]] 首字符小写,后面其它词的首字符大写。
类图
操作是什么?
操作:该类对象可被请求提供的一项服务。 调用操作可改变对象的数据或状态,或可访问对象内部 的数据或状态。 语义:表示类的特征的动词或动词短语。 语法:操作名及形参,首字符小写,后面其它词的首字 符大写
类图-定义类
void Listen(void);
};
}; // 正确的设计,冗长的程序
类的组合特性
// 错误的设计 class Head : public Eye, public Nose, public Mouth, public Ear { … };
继承性允许子类与其超类具有相同的 操作
这有两种目的, 其一是“实现”。超类仅说明抽象的操作而 未提供实现方法,子类应按相同的基调来提 供具体的“实现”; 其二是“改写”。超类虽提供了具体实现, 但子类需要根据自己的特殊情况给出具体实 现,以“改写”继承而来的行为。这是一种 多态性的情形。
类的继承特性
规则2:若在逻辑上B是A的“一种”(A kind of),则允许 B继承A的功能和属性。
class Human { … }; class Man : public Human { … }; class Boy : public Man { … }; //Human是基类
//Man 是Human的派生类
面向对象建模技术
基本结构建模-类和对象
面向对象建模技术-类和类图
建模的一般步骤 识别参与者
直接于系统交互的人或系统
识别用例,画用例图,写出用例文档
一组动作序列,对参与者产生有价值的结果
用活动图描述特定的用例
描述一个过程或者操作的工作步骤,捕获动作及其结果
根据用例和文档抽象出类
捕获系统的静态特征
对象和类
一是使用来自问题域的概念 二是类的名字用该类实际代表的涵义命名点
系统中有哪些角色 有没有一定要存储或分析的信息 有没有外部系统 有没有模版 类库 组件等 系统中有被控制的设备吗 有无需要表示的组织机构
课堂练习
找出图书管理系统中的类,并找出类的属性 及操作.
Abstract B Class ase
Shape
Abstract Class
Shap//绘制一个
Circle
Ellipse
Cube
Sphere
}
多态性--超类的引用指向子类的对象
由继承性可知,每个子类对象都是其超类的 一个对象。这意味着,子类的每个对象都属 于其直接或间接的超类。例如,一个多边形 对象不仅属于Polygon类,而且属于Shape类。 换言之,当需要一个超类对象的时候,而提 供了一个子类对象,总应该是可行的。 子类对象在任何情况下都能替代超类对象, 反之不然。
继承性
继承是类与类之间的一种关系,它 使开发人员在已有类的基础上定义 和实现新类。继承是利用可复用软 件构造系统的有效语言机制。 继承能有效地支持类的复用,当需 要在系统中增加新特征时,所需的 新代码最少,并且当继承和多态性 结合使用时,为修改系统所需变动 的源代码最少。
继承性反映自然的分类结构 (IS-A关系)
封装与状态保持
在对象封装基础上,对象具有保持自己状态的能力。 当传统的过程模块(如函数、子程序、过程等)返回 到调用方,只是把计算结果返回,而不能保持自己 的状态。当同一个过程模块再次调用时与首次调用 一样,模块对以前的状态没有记忆。 对象在自身内部封装了状态信息,并保持直到对象 消亡。在对象生命期中可被多次调用操作,每次状 态改变都能保持记忆。而且,对象如何保持其状态 是隐藏在内部的细节。外部无需知道如何处理。 面向对象封装、信息/实现隐藏及状态保持是面向对 象的核心思想。
超类的引用指向子类的对象
例如:Java使用引用变量来指代对象,我们用 “Shape s1;”来说明一个引用变量,该变 量的说明类型为Shape,它不仅可指代Shape 类的对象,而且可指代Shape类的所有子类的 对象。所以,“s1=new Polygon();”,使 s1变量指代一个Polygon对象。在运行过程中, s1变量拥有一个不变的说明类型(也称为静态 类型),但可指代一组实际类型(也称为动态 类型)的对象。
class Head { public:
void Look(void) { m_eye.Look(); } void Smell(void) { m_nose.Smell(); } void Eat(void) { m_mouth.Eat(); } void Listen(void) { m_ear.Listen(); }
多态性
void Draw(shape *aShape) //多态函 数 { aShape->Draw(); }; main() {
circle aCircle; cube aCube sphere aSphere; Draw(&aCircle); circle Draw(&aCube); cube Draw(&aSphere); sphere
类的封装特性与信息隐藏
信息/实现隐藏有两个主要优点:
设计决策局部化。在对象内私有的设计决策 对系统其它部分影响很小,甚至没有影响, 因此,对局部决策的修改对整个系统的影响 最小,这样限制了“修改蔓延”的影响。 减少信息内容。因对象对外部隐藏实现细节, 这使外部用户不会受到对象内部信息特定格 式的困扰,这样对象外部用户,即其它程序 员,就不用干涉对象内部的事情,也防止向 对象内部引入不稳定的连接。