面向对象软件开发教程
- 格式:docx
- 大小:38.06 KB
- 文档页数:15
C++面向对象程序设计教案(含多款)C++面向对象程序设计教案一、教学目标1.理解面向对象程序设计的基本概念,包括类、对象、继承、多态等。
2.掌握C++面向对象程序设计的基本语法和编程技巧。
3.能够运用面向对象的思想进行程序设计,解决实际问题。
二、教学内容1.面向对象程序设计的基本概念(1)类与对象类是对具有相同属性和行为的一组对象的抽象描述。
对象是类的实例,具有类定义的属性和行为。
(2)继承继承是面向对象程序设计的一个重要特性,用于表示类之间的层次关系。
子类可以继承父类的属性和行为,并在此基础上添加新的属性和行为。
(3)多态多态是指同一个操作作用于不同的对象时,可以有不同的解释和行为。
多态分为编译时多态和运行时多态。
2.C++面向对象程序设计的基本语法(1)类的定义与实现类定义包括类名、属性(成员变量)和方法(成员函数)。
类实现包括成员函数的定义。
(2)构造函数与析构函数构造函数用于创建对象时初始化成员变量,析构函数用于对象销毁时释放资源。
(3)继承与派生继承使用关键字class和public、protected、private访问限定符。
派生类可以添加新的成员变量和方法,也可以重写父类的方法。
(4)多态的实现多态可以通过虚函数、抽象类和接口实现。
虚函数使用关键字virtual声明,抽象类包含至少一个纯虚函数,接口是一种特殊的抽象类,只包含纯虚函数。
3.面向对象程序设计实例(1)设计一个简单的银行账户管理系统,包括账户类、储蓄账户类和信用卡账户类。
(2)设计一个图形类库,包括点、线、矩形和圆形等基本图形类。
三、教学方法1.讲授法:讲解面向对象程序设计的基本概念、语法和编程技巧。
2.案例分析法:通过分析实际案例,让学生理解面向对象程序设计的应用。
3.实践法:让学生动手编写代码,加深对面向对象程序设计的理解。
4.讨论法:组织学生讨论面向对象程序设计在实际项目中的应用。
四、教学评价1.课后作业:布置课后作业,检查学生对课堂知识的掌握程度。
1面向对象的软件开发方法简介面向对象的开发方法把软件系统看成各种对象的集合,对象就是最小的子系统,一组相关的对象能够组合成更复杂的子系统。
面向对象的开发方法具有以下优点。
●把软件系统看成是各种对象的集合,这更接近人类的思维方式。
●软件需求的变动往往是功能的变动,而功能的执行者——对象一般不会有大的变换。
这使得按照对象设计出来的系统结构比较稳定。
●对象包括属性(数据)和行为(方法),对象把数据和方法的具体实现方式一起封装起来,这使得方法和与之相关的数据不再分离,提高了每个子系统的相对独立性,从而提高了软件的可维护性。
●支持封装,抽象,继承和多态,提高了软件的可重用性,可维护性和可扩展性。
1.1 对象模型在面向对象的分析和设计阶段,致力于建立模拟问题领域的对象模型。
建立对象模型既包括自底向上的抽象过程,也包括自顶向下的分解过程。
1.自底向上的抽象建立对象模型的第一步是从问题领域的陈述入手。
分析需求的过程与对象模型的形成过程一致,开发人员与用户交谈是从用户熟悉的问题领域中的事物(具体实例)开始的,这就使用户和开发人员之间有了共同语言,使得开发人员能够彻底搞清用户需求,然后再建立正确的对象模型。
开发人员需要进行以下自底向上的抽象思维。
●把问题领域中的事物抽象为具有特定属性和行为的对象。
●把具有相同属性和行为的对象抽象为类。
●若多个类之间存在一些共性(具有相同属性和行为),把这些共性抽象到父类中。
再自底向上的抽象过程中,为了使子类能更好的继承父类的属性和行为,可能需要自顶向下的修改,从而使整个类体系更加合理。
由于这类体系的构造是从具体到抽象,再从抽象到具体,符合人们的思维规律,因此能够更快,更方便的完成任务。
2.自顶向下的分解再建立对象模型的过程中,也包括自顶向下的分解。
例如对于计算机系统,首先识别出主机对象,显示器对象,键盘对象和打印机对象等。
接着对这些对象再进一步分解,例如主机对象有处理器对象,内存对象,硬盘对象和主板对象组成。
面向对象程序设计(Java)教学大纲一、说明(一)课程性质本课程是计算机科学与技术(软件工程)专业的专业必修课,是软件开发类的主要基础课程。
(二)教学目的本课程通过讲授Java语言的基础知识、最新技术和Java程序的设计开发方法,使学生理解和掌握面向对象程序设计的基本思想,熟练地使用Java语言进行程序的编写、编译以及调试工作,熟悉Java平台的基本框架及体系结构,能独立、比较熟练地用Java技术和主流IDE进行中小规模的程序设计和开发,为后续课程及大中型应用软件的研究、设计打下基础。
(三)教学内容知识方面:了解Java语言程序设计基础知识,Java语言的产生背景及其主要特点,掌握Java 语言的数据类型、常量、变量、表达式,掌握Java语言的程序控制结构、以及字符串、数组等,理解Java面向对象编程的基本思想及其特征,掌握图形编程、事件处理、Swing用户界面设计;掌握部署应用程序和Applet、异常处理与调试技巧;了解泛型程序设计、集合框架;掌握多线程编程知识,Java输入输出流,了解网络编程和数据库开发知识。
技能方面:会独立编写简单的Java应用程序;会独立编写简单的Java小应用程序(Java Applet);能应用AWT和Swing常用组件设计图形化用户界面;掌握Java异常处理机制的简单应用;能编写简单的多线程程序;掌握使用Java输入输出流,能实现对文件的处理。
掌握JDBC,能够对数据库进行处理。
(四)教学时数108学时(课堂授课:36学时;实验:72学时)/ 4学分。
(五)教学方式多媒体教学、上机试验。
二、本文理论部分第1章Java程序设计概述与环境教学要点:了解Java语言的发展历程;掌握Java语言的基本特点;了解Java虚拟机和Java运行系统;了解Java程序编写规范等;了解Java开发环境及常用编辑软件。
教学时数:2学时。
教学内容:1.1 Java的发展及其特点(0.5学时)Java程序设计平台、Java“白皮书”的关键术语、Java发展简史、以及关于Java的常见误解。
oop语言编程教程面向对象编程(Object-Oriented Programming,OOP)是一种常用的编程范式,它将程序中的数据和操作封装到一个个对象中,通过对象之间的交互来实现程序的功能。
相比于传统的过程式编程,OOP可以更好地实现代码的复用性、可扩展性和可维护性,因此在现代软件开发中广受欢迎。
一、面向对象编程的基本概念和原则1. 类和对象:在面向对象编程中,类是用来描述具有相似属性和行为的一组对象的模板。
而对象则是类的一个实例,可以拥有自己的状态和行为。
2. 封装:封装是指将数据和对数据的操作封装在一个对象中,通过对外提供的接口来访问和操作这些数据。
封装可以隐藏对象的内部细节,提高代码的安全性和可读性。
3. 继承:继承是面向对象编程中的一种重要特性,它允许我们定义一个新的类,从已有的类中继承属性和方法。
通过继承,我们可以实现代码的复用和扩展。
4. 多态:多态是指同一个方法可以根据不同的对象调用出不同的行为。
通过多态,我们可以实现方法的重写和方法的重载,从而增加程序的灵活性和可扩展性。
二、面向对象编程的步骤和技巧1. 分析需求:在进行面向对象编程之前,我们需要仔细分析问题,确定需要解决的具体需求,以及涉及到的对象和它们之间的关系。
2. 设计类和对象:根据需求,我们可以设计出适合的类和对象,并确定它们之间的关系。
这一步需要考虑类的属性和方法,以及它们的访问级别和作用域。
3. 实现类和对象:在编写代码前,我们需要先实现类和对象的结构,包括定义类的属性和方法,以及编写构造函数和析构函数等。
4. 编写业务逻辑:根据需求,我们可以编写具体的业务逻辑,包括通过对象之间的交互来实现功能。
在这个过程中,我们可以充分利用封装、继承和多态等特性来简化代码。
5. 测试和调试:在编写完业务逻辑后,我们需要进行测试和调试,以确保程序的正确性。
通过各种场景的测试,我们可以发现并修复潜在的问题和bug。
三、面向对象编程的应用场景1. 软件开发:面向对象编程常常用于大规模软件的开发,它可以将复杂的问题划分为多个对象,从而简化代码的组织和维护。
面向对象程序设计与mfc编程案例教程面向对象程序设计与MFC编程是软件开发中常用的两种技术,通过这两种技术可以更好地进行软件的设计和开发。
下面是一些以面向对象程序设计与MFC编程为题的案例教程,帮助读者更好地理解和应用这两种技术。
1. 图书管理系统案例:通过面向对象程序设计的思想,设计一个图书管理系统。
系统包括图书的增删改查功能,读者的借阅还书功能,管理员的权限管理功能等。
通过MFC编程实现系统的界面和交互。
2. 酒店管理系统案例:利用面向对象程序设计的思想,设计一个酒店管理系统。
系统包括客房的预订、入住、退房功能,员工的工资管理、排班管理功能等。
通过MFC编程实现系统的界面和交互。
3. 学生成绩管理系统案例:采用面向对象程序设计的思想,设计一个学生的成绩管理系统。
系统包括学生信息的录入、成绩的录入和查询功能,以及成绩统计和分析功能。
通过MFC编程实现系统的界面和交互。
4. 邮件客户端案例:利用面向对象程序设计的思想,设计一个简单的邮件客户端。
系统包括收发邮件的功能,邮件的查看和回复功能,以及邮件的分类和搜索功能。
通过MFC编程实现系统的界面和交互。
5. 聊天室案例:采用面向对象程序设计的思想,设计一个简单的聊天室。
系统包括用户的注册和登录功能,用户之间的消息发送和接收功能,以及实时在线用户列表等功能。
通过MFC编程实现系统的界面和交互。
6. 计算器案例:以面向对象程序设计的思想,设计一个简单的计算器。
系统包括基本的加减乘除功能,以及括号和优先级运算的支持。
通过MFC编程实现系统的界面和交互。
7. 文件管理器案例:采用面向对象程序设计的思想,设计一个简单的文件管理器。
系统包括文件的浏览和搜索功能,文件的复制和移动功能,以及文件的重命名和删除功能。
通过MFC编程实现系统的界面和交互。
8. 游戏开发案例:以面向对象程序设计的思想,设计一个简单的游戏。
系统包括游戏角色的移动和攻击功能,游戏关卡的切换和胜利条件的判断功能,以及计分和排行榜功能。
《JAVA面向对象编程》[PDF] 孙卫琴著【目录】第1章面向对象开发方法概述 11.1 结构化的软件开发方法简介31.2 面向对象的软件开发方法简介51.2.1 对象模型61.2.2 UML:可视化建模语言61.2.3 Rational Rose:可视化建模工具71.3 面向对象开发中的核心思想和概念71.3.1 问题领域、对象、属性、状态、行为、方法、实现7 1.3.2 类、类型91.3.3 消息、服务101.3.4 接口111.3.5 封装、透明121.3.6 抽象161.3.7 继承、扩展、覆盖171.3.8 组合191.3.9 多态、动态绑定221.4 UML语言简介241.4.1 用例图241.4.2 类框图251.4.3 时序图261.4.4 协作图271.4.5 状态转换图271.4.6 组件图281.4.7 部署图291.5 类之间的关系291.5.1 关联(Association)291.5.2 依赖(Dependency)311.5.3 聚集(Aggregation)311.5.4 泛化(Generalization)321.5.5 实现(Realization)321.5.6 区分依赖、关联和聚集关系331.6 实现Panel系统351.6.1 扩展Panel系统371.6.2 用配置文件进一步提高Panel系统的可维护性39 1.6.3 运行Panel系统401.7 小结411.8 思考题42第2章第一个Java应用432.1 创建Java源文件432.1.1 Java源文件结构442.1.2 包声明语句452.1.3 包引入语句472.1.4 方法的声明492.1.5 程序入口main()方法的声明502.1.6 给main()方法传递参数512.1.7 注释语句512.1.8 关键字512.1.9 标识符522.1.10 编程规范522.2 用JDK管理Java应用532.2.1 JDK简介542.2.2 编译Java源文件552.2.3 运行Java程序562.2.4 给Java应用打包592.3 JavaDoc文档602.3.1 JavaDoc标记622.3.2 javadoc命令的用法672.4 Java虚拟机的运行时数据区692.5 小结712.6 思考题71第3章数据类型和变量733.1 基本数据类型743.1.1 boolean类型743.1.2 byte、short、int和long类型753.1.3 char类型与字符编码763.1.4 float和double类型793.2 引用类型833.2.1 基本类型与引用类型的区别843.2.2 用new关键字创建对象853.3 变量的作用域873.3.1 静态变量和实例变量的生命周期88 3.3.2 局部变量的生命周期913.3.3 成员变量和局部变量同名923.3.4 将局部变量的作用域最小化933.4 对象的默认引用:this 943.5 参数传递963.6 变量的初始化及默认值983.6.1 成员变量的初始化983.6.2 局部变量的初始化993.7 直接数1003.7.1 直接数的类型1003.7.2 直接数的赋值1013.8 小结1033.9 思考题104第4章操作符1074.1 操作符简介1074.2 整型操作符1084.2.1 一元整型操作符1094.2.2 二元整型操作符1104.3 浮点型操作符1154.4 比较操作符和逻辑操作符1164.5 三元操作符“?:”1194.6 字符串连接操作符“+”1194.7 操作符“==”与对象的equals()方法121 4.7.1 操作符“==”1214.7.2 对象的equals()方法1224.8 instanceof 操作符1254.9 变量的赋值和类型转换1274.9.1 基本数据类型转换1284.9.2 引用类型的类型转换1314.10 小结1314.11 思考题134第5章流程控制1375.1 分支语句1385.1.1 if…else语句1385.1.2 switch语句1415.2 循环语句1445.2.1 while语句1455.2.2 do…while语句1465.2.3 for语句1475.2.4 多重循环1505.3 流程跳转语句1515.4 综合例子:八皇后问题1535.5 小结1565.6 思考题157第6章继承1616.1 继承的基本语法1616.2 方法重载(Overload)1636.3 方法覆盖(Override)1656.4 方法覆盖与方法重载的异同1706.5 super关键字1716.6 多态1726.7 继承的利弊和使用原则1776.7.1 继承树的层次不可太多1776.7.2 继承树的上层为抽象层1776.7.3 继承关系最大的弱点:打破封装178 6.7.4 精心设计专门用于被继承的类180 6.7.5 区分对象的属性与继承1816.8 比较组合与继承1836.8.1 组合关系的分解过程对应继承关系的抽象过程184 6.8.2 组合关系的组合过程对应继承关系的扩展过程186 6.9 小结1896.10 思考题190第7章Java语言中的修饰符1957.1 访问控制修饰符1967.2 abstract修饰符1987.3 final修饰符2007.3.1 final类2017.3.2 final方法2017.3.3 final变量2027.4 static修饰符2067.4.1 static变量2067.4.2 static方法2097.4.3 static代码块2127.5 小结2147.6 思考题215第8章接口2198.1 接口的概念和基本特征2208.2 比较抽象类与接口2228.3 与接口相关的设计模式2278.3.1 定制服务模式2278.3.2 适配器模式2318.3.3 默认适配器模式2358.3.4 代理模式2368.3.5 标识类型模式2418.3.6 常量接口模式2428.4 小结2438.5 思考题244第9章异常处理2479.1 Java异常处理机制概述2489.1.1 Java异常处理机制的优点2489.1.2 Java虚拟机的方法调用栈2509.1.3 异常处理对性能的影响2539.2 运用Java异常处理机制2539.2.1 try…catch语句:捕获异常2539.2.2 finally语句:任何情况下都必须执行的代码254 9.2.3 throws子句:声明可能会出现的异常2569.2.4 throw语句:抛出异常2569.2.5 异常处理语句的语法规则2579.2.6 异常流程的运行过程2609.3 Java异常类2649.3.1 运行时异常2669.3.2 受检查异常2669.3.3 区分运行时异常和受检查异常2679.3.4 区分运行时异常和错误2689.4 用户定义异常2689.4.1 异常转译和异常链2699.4.2 处理多样化异常2719.5 异常处理原则2739.5.1 异常只能用于非正常情况2739.5.2 为异常提供说明文档2749.5.3 尽可能地避免异常2759.5.4 保持异常的原子性2769.5.5 避免过于庞大的try代码块2779.5.6 在catch子句中指定具体的异常类型2779.5.7 不要在catch代码块中忽略被捕获的异常2789.6 小结2789.7 思考题279第10章类的生命周期28310.1 Java虚拟机及程序的生命周期28310.2 类的加载、连接和初始化28310.2.1 类的加载28410.2.2 类的验证28510.2.3 类的准备28510.2.4 类的解析28610.2.5 类的初始化28610.2.6 类的初始化的时机28810.3 类加载器29110.3.1 类加载的父亲委托(Parent Delegation)机制293 10.3.2 创建用户自定义的类加载器29410.3.3 URLClassLoader类30010.4 类的卸载30110.5 小结30210.6 思考题303第11章对象的生命周期30511.1 创建对象的方式30511.2 构造方法30811.2.1 重载构造方法30911.2.2 默认构造方法31011.2.3 子类调用父类的构造方法31111.2.4 构造方法的作用域31411.2.5 构造方法的访问级别31511.3 静态工厂方法31611.3.1 单例(singleton)类31711.3.2 枚举类31911.3.3 不可变(immutable)类与可变类32111.3.4 具有实例缓存的不可变类32511.3.5 松耦合的系统接口32711.4 垃圾回收32811.4.1 对象的可触及性32911.4.2 垃圾回收的时间33011.4.3 对象的finalize()方法简介33111.4.4 对象的finalize()方法的特点33111.4.5 比较finalize()方法和finally代码块334 11.5 清除过期的对象引用33411.6 对象的强、软、弱和虚引用33611.7 小结34211.8 思考题342第12章内部类34512.1 内部类的基本语法34512.1.1 实例内部类34612.1.2 静态内部类34912.1.3 局部内部类35112.2 内部类的继承35212.3 子类与父类中的内部类同名35312.4 匿名类35412.5 内部接口及接口中的内部类35712.6 内部类的用途35812.6.1 封装类型35812.6.2 直接访问外部类的成员35812.6.3 回调(CallBack)35912.7 内部类的类文件36112.8 小结36112.9 思考题362第13章多线程36513.1 Java线程的运行机制36513.2 线程的创建和启动36713.2.1 扩展ng.Thread类36713.2.2 实现Runnable接口37213.3 线程的状态转换37313.3.1 新建状态(New)37313.3.2 就绪状态(Runnable)37413.3.3 运行状态(Running)37413.3.4 阻塞状态(Blocked )37413.3.5 死亡状态(Dead)37513.4 线程调度37613.4.1 调整各个线程的优先级37713.4.2 线程睡眠:Thread.sleep()方法379 13.4.3 线程让步:Thead.yield()方法38013.4.4 等待其他线程结束:join() 38113.5 获得当前线程对象的引用38213.6 后台线程38313.7 定时器Timer 38413.8 线程的同步38613.8.1 同步代码块38913.8.2 线程同步的特征39213.8.3 同步与并发39513.8.4 线程安全的类39613.8.5 释放对象的锁39713.8.6 死锁39813.9 线程通信40013.10 中断阻塞40413.11 线程控制40513.11.1 被废弃的suspend()和resume()方法406 13.11.2 被废弃的stop()方法40713.11.3 以编程的方式控制线程40713.12 线程组40913.13 处理线程未捕获的异常41013.14 ThreadLocal类41213.15 小结41413.16 思考题415第14章数组41714.1 数组变量的声明41714.2 创建数组对象41814.3 访问数组的元素和长度41914.4 数组的初始化42014.5 多维数组42114.6 调用数组对象的方法42214.7 把数组作为方法参数或返回值42314.8 数组排序42514.9 数组的二叉查找算法42614.10 哈希表42814.11 数组实用类:Arrays 43214.12 小结43414.13 思考题435第15章Java集合43715.1 Collection和Iterator接口43815.2 Set(集)44015.2.1 Set的一般用法44115.2.2 HashSet类44215.2.3 TreeSet类44415.3 List(列表)44815.3.1 访问列表的元素44815.3.2 为列表排序44915.3.3 ListIterator接口44915.3.4 获得固定长度的List对象45015.3.5 比较Java数组和各种List的性能45115.4 Map(映射)45315.5 HashSet和HashMap的负载因子45515.6 集合的编译时类型检查45615.7 用for循环遍历集合45915.8 集合实用类:Collections 45915.9 历史集合类46215.10 小结46515.11 思考题466第16章Java I/O系统46716.1 输入流和输出流概述46716.2 输入流46916.2.1 字节数组输入流:ByteArrayInputStream类470 16.2.2 文件输入流:FileInputStream类47116.2.3 字符串输入流:StringBufferInputStream类472 16.2.4 管道输入流:PipedInputStream类47316.2.5 顺序输入流:SequenceInputStream类47416.3 过滤输入流:FilterInputStream类47416.3.1 装饰器设计模式47516.3.2 过滤输入流的种类47616.3.3 DataInputStream类47616.3.4 LineNumberInputStream类47816.3.5 BufferedInputStream类47816.3.6 PushbackInputStream类47816.4 输出流47916.4.1 字节数组输出流:ByteArrayOutputStream类479 16.4.2 文件输出流:FileOutputStream类48016.5 过滤输出流:FilterOutputStream类48116.5.1 DataOutputStream类48116.5.2 BufferedOutputStream类48216.5.3 PrintStream类48316.6 Reader/Writer概述48516.7 Reader类48716.7.1 字符数组输入流:CharArrayReader类48816.7.2 字符串输入流:StringReader类48816.7.3 InputStreamReader类48916.7.4 FileReader类49016.7.5 BufferedReader类49016.8 Writer类49016.8.1 字符数组输出流:CharArrayWriter类49116.8.2 OutputStreamWriter类49116.8.3 FileWriter类49416.8.4 BufferedWriter类49416.8.5 PrintWriter类49416.9 标准I/O 49516.9.1 重新包装标准输入和输出49516.9.2 标准I/O重定向49616.10 随机访问文件类:RandomAccessFile 497 16.11 新I/O类库49916.11.1 缓冲器Buffer概述49916.11.2 通道Channel概述50016.11.3 字符编码Charset类概述50216.11.4 用FileChannel读写文件50216.11.5 控制缓冲区50316.11.6 字符编码转换50416.11.7 缓冲区视图50516.11.8 文件映射缓冲区:MappedByteBuffer 507 16.11.9 文件加锁50816.12 对象的序列化与反序列化51016.13 File类51516.13.1 查看、创建和删除文件或目录51716.13.2 文件过滤器51916.14 小结52016.15 思考题521第17章图形用户界面52317.1 AWT容器52317.2 布局管理器52517.2.1 FlowLayout流式布局管理器52617.2.2 BorderLayout边界布局管理器52817.2.3 GridLayout网格布局管理器53017.2.4 CardLayout卡片布局管理器53317.2.5 GridBagLayout网格包布局管理器53517.3 事件处理53917.3.1 事件处理的软件实现54017.3.2 事件源﹑事件和监听器的类层次和关系545 17.4 AWT绘图55017.5 Graphics类55217.6 小结55417.7 思考题554第18章Swing组件55718.1 Swing组件的基本用法55818.2 边框55918.3 按钮组件56118.4 文本框56418.5 文本区域与滚动面板56618.6 复选框与单选按钮56818.7 下拉列表57018.8 列表框57118.9 页签面板57318.10 菜单57418.11 对话框57918.12 文件对话框58118.13 消息框58418.14 绘图58518.15 JApplet 58818.16 在JApplet中播放声音59418.17 BoxLayout布局管理器59618.18 设置Swing界面的外观和感觉599 18.19 小结60118.20 思考题602第19章Java常用类60319.1 Object类60319.2 String类和StringBuffer类60419.2.1 String类60419.2.2 "hello"与new String("hello")的区别60719.2.3 StringBuffer类60819.2.4 比较String类与StringBuffer类60919.2.5 正则表达式61119.3 包装类61219.3.1 包装类的构造方法61319.3.2 包装类的常用方法61419.3.3 包装类的特点61519.4 Math类61619.5 Random类61719.6 处理日期的类61719.6.1 Date类61819.6.2 DateFormat类61819.6.3 Calendar类62019.7 BigDecimal类62119.8 小结62419.9 思考题624参考文献626。
面向对象程序设计方法
面向对象程序设计(Object-Oriented Programming, OOP)是一种程序设计思想,它强调将运行时环境中的对象与抽象出来的对象类型(或称为类)进行结合,以此来节约编程的工作量并提高程序的可操作性。
典型的OOP程序中,所有可用的类都可以通过继承,联系和组合组合成更高一级的类,而这些类又可以被用来构建新的对象。
OOP程序设计具有以下特征:
1、封装:封装是指将程序代码和数据结构组合在一起,使得它们可以单独使用,而不必考虑其他编程元素。
2、抽象:抽象是指将共性和特性从复杂的实体中抽离出来,建立一个通用的基类,用于管理、处理及访问某一类对象的相似之处。
3、多态:多态是指不同的对象,对同一操作可以表现出不同的行为。
4、继承:继承是指一个类的子类可以继承父类的特征,然后根据自身的需要,增加新的特征。
OOP程序设计的重要特点是它可以让程序员以可重用的模块来构建应用程序,从而大大降低程序编写及测试的工作量,也能够提升程序的可操作性。
类对象可以被构建成抽象层次结构,以便从可复用的模块中派生出更多新的类。
大量的类可以被组合在一起,形成一个功能更丰富的解决方案。
此外,多态性能让程序维护变得更加容易,因为改变一个类的行为,也不会影响到其他类。
软件是在代码之外发生的一切事情。
如何继续学习过程你将从本章学到什么?两千年后(P2K)的软件环境是什么样的?P2K软件环境中的技术和技能是什么?有关P2K技能和技术有哪些概述性的资源?软件专家在面向对象项目中充当什么角色/职位?如何继续面向对象的学习过程?为什么需要阅读本章?你的技能,以及如何使用它们,是能否成为成功的软件专家的重要决定性因素。
通过阅读本书,你会获得学习对象技术和技巧所需的基本知识,本章也给你提供了继续进一步学习过程的建议。
至此,你已经了解了面向对象的全部内容,现在你已经是一名准备开发大型、关键性任务软件的对象专家。
好吧,现在你还不全是。
实际上,你已经掌握了一些有用的概念和技能,也明白了它们如何一起使用,在浏览复习题以及案例学习的过程中,你已经使用了它们。
目前你正处在有利地位,可以继续你的学习过程,这个过程将很可能贯穿你的整个职业生涯。
本章给出了对软件业目前的状况以及将来的发展方向的见解,在接下来的几年中将会需要什么样的技能,要如何才能获得这些技能。
11.1 P2K 环境在你的整个职业生涯中一直要学习新的技能。
软件业在20世纪90年代后半期被Y2K危机严重影响了,新的开发被耽搁下来或者干脆取消,以转移资源解决Y2K危机,结果,许多企业都推迟了对采用新的技术和技能的投资。
现在Y2K危机已经过去了,我们正面对着两千年后(P2K)的软件环境,一个使用本书中描述的技术支配的环境。
在P2K环境中,你将会应用新的方法,例如面向对象的和基于组件的方法,采用迭代和增量方法的新的开发过程,像Java和CORBA这样新的技术,以及像用况建模这样新的技术。
本书概述了对象开发技术,本节也总结了用于P2K环境的关键技术和技能。
要理解P2K环境,必需考虑下面几项内容:新的软件策略。
使能技术。
领先的开发技术。
现代软件过程。
对象编程语言。
如何获得P2K技能。
11.1.1 新的软件策略21世纪初期将会由两项关键的软件策略来统治:企业应用集成(EAI )和电子商务。
EAI 把全异的软件应用集成为一个整体以支持新的和复杂的业务过程。
中间件和组件技术,例如下面这节里描述的CORBA和兼容COM+的工具也用于支持EAI。
了解EAI的一个好去处是,也可以参考《Enterprise Application Integration » (Linthicum,2000)一书。
包装技术是《Building Object Applications That Work » (Ambler ,1998a)一书详细讲述的主题,对于EAI的开发者来说它也是一项重要的技能。
电子商务也称为基于In ternet的商务,它关注于使用电子技术支持产品销售和服务。
电子商务成功的机构有,戴尔公司()一一个计算机软硬件零售商;亚马逊()一一个销售书、录像带、音乐CD的零售商;Ebay网()一一个在线拍卖网站。
电子商务最好的资源是杂志《The Industry Standar» (),它以报纸和在线两种形式出版发行。
11.1.2 使能技术除了11.1.5节描述的对象编程语言外,还有好几个使能技术也是P2K环境中占主导地位的技术。
这些技术有:CORBACOM+EJB (企业Java组件模型)XML持久层/框架1. CORBA (公共对象请求代理体系结构)。
CORBA是一种由对象管理组(OMG )制定的支持和维护分布式对象的一种标准结构,在20世纪80年代晚期引入。
在20世纪90年代早期,CORBA承诺要成为最好的面向对象开发的标准环境,实际上,业已证明CORBA是21世纪初中间件竞技中的一支重要力量。
学习CORBA的一个好地方是beginners.html。
2 . COM+。
这是微软组件对象模型(COM )的最新体现。
COM是微软的对象链接和嵌入(OLE)以及ActiveX技术的演化,后来COM变成分布式COM (DCOM ),现在变成了COM+。
COM+是一项专有方法,用于微软平台的分布式组件开发。
访问com可以得到一系列基于COM 技术的白皮书、演示文稿以及案例学习的链接。
3 . EJB。
EJB是一种组件结构,用于开发和部署基于组件的分布式业务应用。
遵照EJB结构编写的应用程序是可升级的、可进行事务处理的并且是多用户安全的。
这些应用程序可以编写一次,然后就部署到任意支持EJB标准的服务器平台上。
EJB让开发人员获得并使用企业类服务来创建关键任务应用。
开始学习EJB最好的地方是在线/products/ejb以及《Mastering Enterprise JavaBeans » (Roman, 1999)一书。
4 •可扩展标记语言(XML )。
进行数据共享的一种工业标准方法,对于EAI和电子商务来说这是一种重要的使能技术。
网站是开始学习XML最好的地方。
5•持久层。
持久层(也称做持久框架),通过映射元数据使得从永久存储(例如关系数据库)中存储、检索和删除对象得以自动化。
如果关系数据库用来存储对象,那么映射元数据会把对象的一条属性与存储对象的数据库表列联系起来。
持久层向对象隐藏了数据模式,这会大量减少持久对象所需编写的代码数量,从而增强软件的健壮性并增加开发生产力。
在《BuildingObject Applications That Work》(Ambler , 1998a)—书中我详细讨论了持久层,这本书是本系列的第二本书。
你可能想下载描述持久层设计的白皮书,我已经把它放在网站/persiste nceLayer.html 上了。
11.1.3 领先的开发技术作为工作在P2K环境中的开发人员,你很可能会用到下面大多数或所有的开发技术:基于组件的开发(CBD )。
增量开发。
迭代开发。
面向对象。
模式。
统一建模语言(UML )。
以应用为中心的设计。
用况建模。
1 •基于组件的开发(CBD )。
一种开发方法,其中软件可以作为系列交互组件来部署,每个组件都封装一套预定义的行为。
包括面向对象和结构化语言在内的任何一种技术都可能用来实现组件。
常见的组件方法包括OMG的CORBA组件模型(CCM),Sun公司的EJB和微软的COM+ 。
开始学习CBD 的最好的地方是《Component Software:Beyond Object-Oriented Programming》(Szyperski,1998)—书和网站。
2 •增量开发。
一种软件开发方法,它把项目组织成几个小的发布版本,而不是以一次“大爆炸”版本发行。
这使你能较早地把软件交付给用户,并通过用户对最初版本的反馈来减小项目风险。
增量开发已经在第10章中详细讨论过了。
3 •迭代开发。
这是软件开发中的一种非顺序方法。
换句话说,可以做一点儿需求工程,一点建模,一点实现,一点测试,再一点建模,再一点实现,再一点需求工程,等等。
使用迭代开发方法,执行活动的顺序并不是一成不变的。
通过把技术用到项目当中它们最起作用的地方,迭代开发减少了项目风险和开发时间。
迭代开发已经在第10章中详细讨论过了。
4 .面向对象。
软件范型基于下面的概念:软件应该从表示状态(数据)和行为(过程)的对象上创建。
面向对象的概念在20世纪60年代后期引入;在20世纪80年代,使用Smalltalk 和C++这样的语言后面向对象开始流行;到20世纪90年代,C++和Java已经变成了事实上的开发标准。
对于对象开发人员来说,网上最有价值的资源是Cetus中对象和组件的链接,。
下一步,我推荐阅读《Applying UML and Patterns》(Larman, 1998),它关注于面向对象分析和设计, 这些内容分别是本书第6章和第7章的内容,如果想要了解得更详细一点,请参考《BuildingObject Applications That Work》(Ambler , 1998a)一书,这本书从对象开发人员的角度详细讲述了一系列面向对象的专题。
5 •模式。
模式是考虑到相关因素的通用问题的解决方案,支持复用经过验证的其他开发人员的技术和方法。
模式有许多不同的类型,包括设计模式、分析模式、过程模式、结构模式、组织模式、编程习语甚至还有反模式(经过验证不能起作用的那些方法)。
分析模式在第6章中已经讨论过,设计和结构模式在第7章中也讨论过,编程习语在第8章中讨论过,过程模式在第10章中讨论过了。
在对象建模世界中,模式组成了建模人员间通用语言的基础。
例如,听到“那是Singleton”或“这是一种策略实现”这样的话,你要明白他们所说的Singleton和“策略”设计模式是很常见的。
你可以在网站中找到一系列有用的并与模式相关的资源,包括概述和高级主题。
6 .统一建模语言(UML )。
UML是一种工业标准建模语言,它定义了面向对象建模的符号和语义。
《UML Distilled》(Fowler和Scott, 1997)是一本极好的对UML技术进行介绍的书,如果对UML有兴趣的话,它也是你在读完本书之后需要阅读的一本书。
在《Building Object Applications That Work » (Ambler, 1998a)和《Process Patterns》(Ambler, 1998b)这两本书里,我概述了这些技术以及它们如何配合使用,这与本书中每一个建模章节(第3、6、7章)中我给出的概述概念上相似。
如果需要更详细的信息,请访问。
我也维护着一个网页,在它上面有一些重要资源的网络链接。
7 •以应用为中心的设计。
一种流线型的系统化的方法,用于设计真正紧密适应用户需求的软件,这些软件不仅更有用也更易使用,并且也更简单更容易创建。
本质用况和本质用户界面原型(实物模型)在第3章中讲述过,它们是以应用为中心的设计技术的一些例子,学习这些技术最好的开始是《Software for Use》(Constantine 和Lockwood,1999) 一书。
8 •用况建模。
用况建模是一种需求工程技术,在20世纪90年代早期开始在面向对象开发团体内部流行。
正如在第三章中所见,用况模型由用况图和一系列用况组成,用以归档系统需求行为。
我所读过的关于用况的最好的书籍是《Applying Use Cases》(Schneider和Winters, 1998) ;我强烈推荐阅读本书。
11.1.4 现代软件过程P2K环境的技术和技能很复杂,正如在第10章中所见,要想有效地使用它们,开发人员就需要能够反映这种复杂性的现代软件过程。
这些过程包括:极限编程(XP )。
面向对象软件过程(OOSP)。
OPEN过程。
统一过程。
1 •极限编程。
一种周密计划的软件开发方法,强调沟通、简化、反馈和自信。
XP关注于与用户一起工作、简单但一流的开发以及测试等。