- 1、本文档共66页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
OOP 面向对象编程
OOP
AIA
什么是面向对象?
Object??? Oriendted?????? Programming
对象??? ? 以…为导向的 ? ?程序设计
面向对象就是使用对象进行程序设计,简写成OOP
面向过程? (SP)
面向对象(OOP)
设计思路
自顶向下、层次化、分解
自底向上、对象化、综合
程序单元
函数模块
对象
设计方法
程序 = 算法 + 数据结构
程序 = 对象 = 数据 + 方法
优点
相互独立,代码共享
接近人的思维方式
模拟客观世界
缺点
数据与程序不一致
维护困难
客观世界的无序性
概念不成熟
SP和OOP对比
一个示例
示例场景:
我们需要设计一个人事管理系统,其中的一个功能是对各种不同类型的员工,计算其当月的工资——不同类型的员工,拥有不同的薪金计算制度。
结构化做法
结构化做法
1.获得人事系统中所有可能的员工类型
?2.根据不同的员工类型所对应的不同的薪金制度,计算其工资?
enum EmployeeType
{
Engineer;
Sales;
Manager;
…
}
// 计算工资程序
if ( type == EmployeeType.Engineer)
{……}
else if (type == Employeetype.Sales)
{……}
面向对象设计
1.根据不同的员工类型设计不同的类,并使这些类继承自一个Employee抽象类,其中有一个抽象方法GetSalary。
?2.在各个不同的员工类中,根据自己的薪金制度,重写(override)GetSalary方法。
abstract class Employee
{…public abstract int GetSalary();}
class Engineer: Employee
{…
public override int GetSalary(){…}
}
class Sales: Employee
{…
public override int GetSalary(){…}
}
// 显示工资程序
Employee e = emFactory.GetEmployee(id);
MessageBox.Show( e.GetSalary());
示例场景:
现在需求改变了……随着客户公司业务规模的拓展,又出现了更多类型的员工,比如钟点工、计件工……等等,这对人事管理系统提出了挑战——原有的程序必须改变。
结构化做法
几乎所有涉及到员工类型的地方(当然包括“计算工资程序”)都需要做改变……这些代码都需要重新编译,重新部署…….
面向对象做法
只需要在新的文件里增添新的员工类,让其继承自Employee抽象类,并重写GetSalary()方法,然后在 EmployeeFactory.GetEmployee方法中根据相关条件,产生新的员工类型就可以了。其他地方(显示工资程序、Engineer类、 Sales类等)则不需要做任何改变。
重新认识面向对象
对于前面的例子,从宏观层面来看,面向对象的构建方式更能适应软件的变化,能将变化所带来的影响减为最小。
对象
?对象是面向对象编程的核心部分,是实际存在的具体实体,具有明确定义的状态和行为;
?对象其实就是“数据”和“函数”的封装体,其中:
数据表示自身的状态,也称作“属性”或“成员数据”;
函数表示自身的功能,也称作“方法”或“成员函数”。
类
人们为了更好地认识世界,将现实生活中的事物(对象)划分成类;
同一类中的事物总是具有一些共性。
类和对象的关系
类是用来描述实体的“模板”或“原型”;
对象是实际的实体,每一个对象都是类的一个具体实例。
Java OOP三大思想
封装
继承
多态
封装
隐藏实现细节,对外提供公共的访问接口,增强代码的可维护性
具体实现方式:属性私有化、添加公有的setter,getter方法
继承
多态
增强代码的可扩展性、维护性
同一个实现接口,使用不同的实例而执行不同操作。通过Java接口/继承来定义统一的实现接口;通过方法重写为不同的实现类/子类来定义不同的操作
静态的多态就是只函数的重载,动态的多态就是方法的覆写
原则:“左声明右实现”
这个原则可以在任何地方使用,包括在接口和抽象类中,软件初学者可以以这个原则来理解面向父类的编程方法。
父类
/***坦克类,它是所有坦克的父类*/
class Tank {
public void printTank()
{
System.out.println(This is Tank);
}
}
/***M1坦克类,它继承了坦克父类*/
class M1Tank extends Tank
{
//该方法重写了父
您可能关注的文档
- Nor Flash测试方法介绍.doc
- NODEB的安装与调测试题答案.doc
- NOR和NAND flash差别.doc
- Nexans综合布线方案书.doc
- NPN与PNP集电极开路型传感器在PLC连接中的转换.doc
- NOIP知识点串讲 图论(一).ppt
- NRYDJ油浸式试验变压器.doc
- NovaCloud在同步和异步系统中如何使用.docx
- NS-JD电缆接地箱各种型号选型.doc
- NSK SN607轴承尺寸参数及测量规范.doc
- 10《那一年,面包飘香》教案.docx
- 13 花钟 教学设计-2023-2024学年三年级下册语文统编版.docx
- 2024-2025学年中职学校心理健康教育与霸凌预防的设计.docx
- 2024-2025学年中职生反思与行动的反霸凌教学设计.docx
- 2023-2024学年人教版小学数学一年级上册5.docx
- 4.1.1 线段、射线、直线 教学设计 2024-2025学年北师大版七年级数学上册.docx
- 川教版(2024)三年级上册 2.2在线导航选路线 教案.docx
- Unit 8 Dolls (教学设计)-2024-2025学年译林版(三起)英语四年级上册.docx
- 高一上学期体育与健康人教版 “贪吃蛇”耐久跑 教案.docx
- 第1课时 亿以内数的认识(教学设计)-2024-2025学年四年级上册数学人教版.docx
文档评论(0)