面向对象简介 majun@nju.edu.cn
面向对象简介 majun@nju.edu.cn
计算机应用 。日标: 一解决具体问题 问题 结构化 世界 ·科学计算 ·音视频解码 面向对象 ·文本编辑 认识 表示 前提: 一充分认识问题世界 计算机 一在计算机中合理的表示问题世界 世界
计算机应用 • 目标: – 解决具体问题 • 科学计算 • 音/视频解码 • 文本编辑 • 。。。 • 前提: – 充分认识问题世界 – 在计算机中合理的表示问题世界 问题 世界 计算机 世界 认识 表示 结构化 面向对象
结构化思想 ·程序=数据+算法 ·强调过程/功能抽象 ·自顶向下,逐层分解 函数/过程 颗序结构 选择结构 循环结构
结构化思想 • 程序=数据+算法 函数/过程 函数/过程 函数/过程 • 强调过程/功能抽象 • 自顶向下,逐层分解
面向对象思想 ·认为自然界是由一组彼此相关并能相互交互的实体(对象)所组成。 每个实体具有自身的属性、行为: 实体之间存在多种关系 一领导、兄妹、朋友、敌人、师徒。。。 士壁现 模拟
面向对象思想 • 认为自然界是由一组彼此相关并能相互交互的实体(对象)所组成。 • 每个实体具有自身的属性、行为; • 实体之间存在多种关系 – 领导、兄妹、朋友、敌人、师徒。。。 – 装备。。。 • 实体之间可以交互 模拟
面向对象思想 计算机世界 现实世界 计免 计兔 映射 立休 对象 位休 实体 实例化 絷 概念世界 类了 计算机 ADT 类 表示 ADT
面向对象思想 现实世界 实体 实体 实体 概念世界 ADT ADT 计算机世界 对象 对象 对象 类 类 抽象 实 例 化 抽 象 映射 计算机 表示
面向对象思想 星矢:Bronze Saint 发 hame=星天 gomder male age 16 height 165 映射 rmer:Armer=天马座圣衣 microcosm int 10000 ski11s=(流星拳,彗星拳 Instanceof People -name gemder Skill age Armer height 人: walkO 属性: +talk( 神 圣斗士 圣斗士:人 armer Saint 青铜 属性: 白银 圣衣 -armer Armer microcosm int 黄金 小宇宙 skills 圣衣 大招 +skill(in skill Skill.in object People) 青铜 银 能力 Bronze Saint Silver Saint Gold Saint 黄金 发大招 神圣 星座
面向对象思想 • 人 • 神 • 圣斗士 • 青铜 • 白银 • 黄金 • 圣衣 • 青铜圣衣 • 白银圣衣 • 黄金圣衣 • 神圣衣 • 星座 人: • 属性: • 姓名 • 性别 • 年龄 • 身高 • … • 能力 • 行走 • 说话 • 。。。 圣斗士:人 • 属性: • 圣衣 • 小宇宙 • 大招 • … • 能力 • 发大招 • 。。。 Instanceof 映射
I package demo.saint; 1 package demo.saint; 3 Import java.ut1l.LinkedList; 3 public class People 4 4 protected String name; 5 public abstract class Saint extends People 5 private final String level; protected string gender; private String constellation; 6 protected int age; protected int height; private Armer armer; 8 public void walk(){ 1 package demo.saint; System.out.printIn(name+ nkedList(); 0 2 String gender,int age,int height)( 19 public void talk(String msg){ 3 public class Main System.out.println(name+"s 4 3 59 public static void main(String[]args){ 4= public People(String name,Strin 6 BronzeSaint x1ngsh1=new BronzeSa1nt("星矢","M",16,165) this.name-name; > xingshi.setConstellation("天马"): the arner "armer.getconstellation()); 6 this.gender-gender; this.age=age; Armer tm_armer=new Armer("天马")i 8 9 this.heightsheight; xingshi.setArmer(tm_armer); 19 xingshi.setMicrocosm(10000): 1 package demo.saint; 星矢has armed the armer天马 3 public class Armer( 4 private String constel 5 public Armer(String cc 星矢learned the skil1天马流星拳 6 this.constellatior k111.getName()); public String getconst 星矢learned the skill 天马彗星拳 9 return this.conste 11 星矢perform天马流星拳to majun package demo.saint; 2 38 System,out.printin(name+"pertorm -+sk111.getName()+"to "+target.nane); 3 public class BronzeSaint extends Saint 39 Yelse System.out.println(nane+"does not have the skill "+skil1.getName()); 5 public BronzeSaint(String name,String gender,int age,int height){ 41 42 6 super("Bronze",name,gender,age,height); 43 public String getconstellation(){ 7 44 return constellation; 45 9 6 public void setConstellation(String constellation){ 47 this.constellation constellation; 4 1 49 public String getLevel(){ return level; 52
结构化VS面向对象 对象 对象 函数 对象 和过程 数据 对象 (a)结构化程序 (b)面向对象程序
结构化VS面向对象
结构化程序设计的特点 Data 以功能为中心,强调过程 下 (功能)抽象 1 ,数据与操作分离。 实现操作的封装,但数据 是公开的,数据缺乏保护。 模块边界模糊。 功能往往针对某个程序而 设计,这使得程序功能难 以复用。 功能易变,程序维护困难。 基于功能分解的解题方式 与问题空间缺乏对应。 Sub-programs
结构化程序设计的特点 • 以功能为中心,强调过程 (功能)抽象。 • 数据与操作分离。 • 实现操作的封装,但数据 是公开的,数据缺乏保护。 • 模块边界模糊。 • 功能往往针对某个程序而 设计,这使得程序功能难 以复用。 • 功能易变,程序维护困难。 • 基于功能分解的解题方式 与问题空间缺乏对应。 Data Sub-programs
面向对象程序设计的特点 Objects 以数据为中心,强调数据抽 象,数据与操作合而为一。 。1 实现了数据的封装,加强了 数据的保护。 模块边界清晰。 对象往往具有通用性,使得 程序容易复用 。 对象相对稳定,有利于程序 维护。 。 基于对象/类的解题方式与 问题空间有很好的对应
• 以数据为中心,强调数据抽 象,数据与操作合而为一 。 • 实现了数据的封装,加强了 数据的保护。 • 模块边界清晰。 • 对象往往具有通用性,使得 程序容易复用。 • 对象相对稳定,有利于程序 维护。 • 基于对象/类的解题方式与 问题空间有很好的对应。 Objects 面向对象程序设计的特点