Transcript 00-课程介绍
面向对象程序设计 课程介绍 计算中心 张岩峰 (http://faculty.neu.edu.cn/cc/zhangyf) [email protected] 程序设计语言的发展 • 机器语言 – 由计算机硬件系统可以识别的二进制指令组成的语 言。 程序设计语言的发展 • 机器语言 – 由计算机硬件系统可以识别的二进制指令组成的语 言。 • 汇编语言 – 将机器指令映射为一些可以被人读懂的助记符,如 ADD 、SUB。 程序设计语言的发展 • 机器语言 – 由计算机硬件系统可以识别的二进制指令组成的语 言。 • 汇编语言 – 将机器指令映射为一些可以被人读懂的助记符,如 ADD 、SUB。 • 高级语言 – 屏蔽了机器的细节,采用具有一定含义的数据命名和 容易理解的执行语句。 程序设计语言的发展 • 机器语言 – 由计算机硬件系统可以识别的二进制指令组成的语 言。 • 汇编语言 – 将机器指令映射为一些可以被人读懂的助记符,如 ADD 、SUB。 • 高级语言 – 屏蔽了机器的细节,采用具有一定含义的数据命名和 容易理解的执行语句。 • 面向对象的语言 – 将客观事物看作一个具有属性和行为的对象,通过抽 象同一类对象的共同属性和行为,形成类。 面向对象的方法 • 结构化程序设计方法 设计的基本原则是自上而下、逐步求精。 按照程序所需 实现的功能,将其划分为若干个关系简单、相对独立 的模块; 每一个模块内部都是由三种基本的程序结构——顺序结 构、选择结构和循环结构组成。 • 优点 – 分解程序设计的复杂性 • 缺点 – 命名难以控制 – 程序不便于开发、维护 – 程序难以扩展 面向对象的方法 • 面向对象方法 – 将数据及对数据的操作方法放在一起, 作为一个相互依存、不可分离的整体—— 对象。 – 同类对象的共性形成类,类通过统一的 外部接口与外界发生关系. – 对象与对象之间通过消息进行通信。 五子棋程序 面向过程 main{ while(true){ 黑棋下子; 绘制画面; 白棋下子; 绘制画面; if(胜负已分){ 输出结 果; } } } 面向对象 class 选手 { 选手名字; 下子(){…} } main{ 选手A = new 选手; 选手B = new 选手; 棋盘界面 = new 棋盘; 五子棋规则 = new 规则; class 棋盘 { 棋盘规格; 绘制(){…} } while(true){ 选手A.下子; 棋盘界面.绘制; 选手B.下子; 棋盘界面.绘制; if(五子棋规则.判断胜负){ 输出结果; } } class 规则 { 规则名字; 判断胜负(){…} } } 思考 • 面向过程和面向对象程序的优缺点? 五子棋程序 面向过程 main{ while(true){ 黑棋下子; 绘制画面; 白棋下子; 绘制画面; if(胜负已分){ 输出结 果; } } } 面向对象 class 选手 { 选手名字; 下子(){…} } main{ 选手A = new 选手; 选手B = new 选手; 棋盘界面 = new 棋盘; 五子棋规则 = new 规则; class 棋盘 { extends 选手{ 新选手 棋盘规格; 选手IQ; while(true){ 绘制(){…} 选手头像; 选手A.下子; } 选手装备; 棋盘界面.绘制; } 选手B.下子; class 规则 { 棋盘界面.绘制; 规则名字; if(五子棋规则.判断胜负){ 判断胜负(){…} 输出结果; } } } } 五子棋程序 面向过程 main{ while(true){ 黑棋下子; 绘制画面; 白棋下子; 绘制画面; if(胜负已分){ 输出结 果; } } } 面向对象 class 选手 { 选手名字; 下子(){…} } main{ 选手A = new 选手; 选手B = new 选手; 棋盘界面 = new 棋盘; 五子棋规则 = new 规则; class 棋盘 { extends 选手{ 新选手 棋盘规格; 选手IQ; while(true){ 绘制(){…} 选手头像; 选手A.下子; } 选手装备; 棋盘界面.绘制; } 选手B.下子; class 规则 { 棋盘界面.绘制; 规则名字; if(五子棋规则.判断胜负){ class 象棋选手 extends 新选手{ 判断胜负(){…} 输出结果; } 下子(); } 悔棋(); } 特殊技能之连走两步(); } } class 选手 { 选手名字; 下子(){…} } class 棋盘 { 棋盘规格; 绘制(){…} } class 规则 { 规则名字; 判断胜负(){…} } 面向对象的方法 • 使程序员更好的理解和管理庞大而复杂的程序,它 在结构化程序设计的基础上完成进一步的抽象。这 种在设计方法上更高层次的抽象正是为了适应目前 软件开发的特点。 • 面向对象的程序设计方法绝非是要摒弃现有的结构 化程序设计方法,相反,它是在充分吸收结构化程 序设计优点的基础上,引进了一些新的、强有力的 概念。 • 面向对象的程序设计方法把可重复使用性视为软件 开发的中心问题,通过装配可重用的部件来生产软 件,而不是像目前编程所用的那样,通过调用函数 库中的函数来实现。事实上,在对象内部的实现 上,我们也常常调用函数库中的很多有用的函数, 然而从程序的总体结构上说,它是由一系列对象构 成的,对象之间能够以某种方式进行通信和协作, 从而实现程序的具体功能。 面向对象设计的特征 • 利用对象进行抽象 – 基于对象和对象间的相互作用,面向对 象技术对真实世界进行抽象。 • 对象具有生命周期 – 每一个对象都是独一无二的,都有创 建、生存、销毁的过程。 • 对象通过消息进行通信 – 对象可以与其他对象相互操作。 面向对象设计的特征 • 封装良好的类 – 对外部隐藏所有实现的细节,便于修改和替换 • 对象所属的类具有层次结构 – 关联 – 聚合或组合 – 继承 • 多态性 – 多态性是面向对象系统最终表现出来的基本特 征,即同样的语句产生不同的行为。 面向对象的语言 • Smalltalk – 这是第一种成功的面向对象程序设计语言,也是Java的 基础语言。 • C++ – C++是C的超集,设计于80年代,增加了面相对象的概 念。 – 优点:数据抽象和封装,丰富的内置函数库; – 缺点:除包含C语言的缺点外,程序过于复杂而容易出 错; • Java – 90年代开始广泛使用的网络编程语言; – Smalltalk的思想,C++语法的简化。 编程语言使用率排行榜 JAVA语言与其它语言的关系 • 相比较于C++ – 高可移植性 • Windows、MacOS、UNIX等平台 – 丰富的支持类库,易扩展 • Web编程、企业计算、嵌入计算 – 自动内存管理 – 调试更简单 • 与其它语言互为补充 – – – – C语言(底层,速度快) Python、Ruby、Perl、PHP(脚本语言,简单) MatLab、R(数据分析语言,数学分析计算功能强大) SQL(数据库管理语言,数据管理的增删改查) 教学内容 • • • • • • • • Java语言基础 数组与方法 类和对象 文件操作 图像界面swt 多线程编程/网络编程 连接数据库 Hadoop MapReduce分布式编程(optional) 课程表 • 理论课 – 时间:1-19周 – 地点:采矿馆203 周一 1-2节 • 实验课 – 时间:4-19周 周一 5-6节 – 地点:计算中心微机?室 教学模式 • • • • 理论讲授(20%) 实例演示(20%) 讨论思考(10%+?%) 上机实践(50%+?%) 考核方法 • 平时成绩 • 三次作业 • 课程设计(考试) 20% 30% 50% 强调问题 • • • • 旷课、迟到、早退 不及时交作业 上课违纪3次 作业抄袭、课程设计抄袭 • 上课可以带笔记本电脑 参考书推荐 MOOC • MOOC(Massive Open Online Course) – 学堂在线 https://www.xuetangx.com/ – 慕课中国 http://www.mooc.cn/ – 辽宁省资源共享课 http://sharecourse.upln.cn/ – 翁恺,用Java学编程 http://study.163.com/course/introduction.htm?co urseId=533006 问题? • • • • 为什么学“编程”? 程序员是个什么样子的工作? “编程”有多难? 怎样能把编程能力提高? 经验与建议 • 编程不同于理论学习,要培养动手能力 – Just do it! – Just google it! – 读别人写的优秀的代码 – 在已有代码之上修改 – 不要浪费时间在看书上,把书当成工具书,带 着目的的去读书 练习