00-课程介绍

Download Report

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!
– 读别人写的优秀的代码
– 在已有代码之上修改
– 不要浪费时间在看书上,把书当成工具书,带
着目的的去读书
练习