zoukankan      html  css  js  c++  java
  • 【Head First Java 读书笔记】(二)类与对象

    前篇当中,代码都放在main()里面,那根本不是面向对象的做法。

    椅子大战(对象如何改变你的一生)

    程序规格:

    在图形接口画出四方形,圆形和三角形,当用户点选图形时,图形需要顺时针转360度并依据形状的不同播放不同的AIF音效文件

    这里有阿珠跟阿花两个程序员

    阿珠想:这个程序需要执行什么动作?需要rotate和playSound,然后她就开始进行设计的工作。

    阿花想:这个程序需要什么样的事物?有什么关键角色?她首先想到形状体(shape),还有用户,声响等对象与点击事件,然而这些对象早就已经建立好了,所以她只要专注于创建形状体就行了。

    阿珠:写了rotate和playSound两个方法

    阿花:为3个形状各写出一个类。每个类中都有rorate和playSound方法

    如果这是需求增加,要求加上阿米虫原虫形状,用户点选时也是旋转并播放.hif声音文件。

    对于阿珠来说就麻烦了,要在方法中进行判断,如果不是阿米虫先查询播放哪个AIF文件,然后播放,如果是阿米虫就播放.hif。

    对于阿花来说,不需要动到已经测试好的程序就可以达到新目标,面向对象的适应性与可扩展性让她面对修改时不会太过于痛苦

    如果现在需要更改阿米虫的旋转方式。

    对于阿珠来说,就需要更改rotate()函数,并且要加入额外的参数,还要进行选择,本来已经测试好的东西全部都要重来一遍

    对于阿花来说,只需要修改阿米虫这一个类的方法而已。其他的代码都不需要修改。

    阿珠这时说,阿花的代码有重复。那么这时,阿花可以利用面对对象的继承

    找出四个类的共同的部分,取出新的类,然后让四个类继承这个类,子类会自动获得父类的功能,这样就解决了代码重复的问题

    子类的方法可以覆盖父类的方法,Java虚拟机在遇到不同的子类时会使用不同的方法。

    覆盖的意思就是让子类重新定义继承下来的方法,以改变或延伸此方法的行为。

    面对对象:
    ”加入新功能时不会搞乱已经写好的代码“

    ”将数据与操作数据的方法都摆在同一个类内“

    ”类可以重复运用到别的应用程序中,当写一个新类时,可以使人类有足够的扩展性,以便以后用到“

    以对象来思考

    当你在设计类时,要记得对象死考类的模型塑造出来的。

    你可以这样看:

    对象是已知的事物

    对象会执行的动作

    对象本身已知的事物被称为:

    实例变量 instance variable

    它代表对象的状态(数据)且该类型的每一个对象都会独立度拥有一份该类型的值,因此也可以把对象当作为实例。

    对象可以执行的动作称为:
    方法method

    在设计类时,一般也会设计出操作对象数据的方法,对象带有操作或读取实例变量的方法是很常见的情形。

    类与对象两者之间的不同

    一个类可以有许多对象

    类不是对象(却是用来创建它们的模型)

    类是对象的蓝图

     

    逃出main()

    只要还呆在main()中,你就是在面对对象外的,对于货真价实的面对对象应用程序来说,需要用对象来与对象交互。

    main()的两种用途:
    测试真正的类

    启动你的Java应用程序

    真正的Java程序只会让对象与对象教会。此处所说的交互是指相互调用方法。

    Java会拾荒

    创建对象的时候,对象会被存放在称为堆的内存区域中。不管对象如何创建都会放在此区域中。此区域并非普通的堆,它是可回收垃圾的堆。Java会根据对象的大小来分配内存空间,当某个对象被Java虚拟机察觉不再会被使用到时,该对象就会被标记成可回收的。如果内存开始不足,垃圾收集器就会启动来清理垃圾、回收空间,让空间能够再次被利用

    QAQ:

    若需要全局(global)变量或方法时该如何?

    在Java中的面对对象概念中并没有全局变量这回事。在任何类中的任何程序都可以存取public static 的方法。任何变量只要加上public 、static 和final 基本上都会变成全局变量取用的常量。

    若有成百上千的类时要如何提交?是否恶意包装成类似单一应用程序的形式?

    可以把所有的文件包装进依据pkzip格式来存档的java Archive =.jar文件,在jar文件中可以引入一个简单文件格式的文字文件,它被称为manifest,里面有定义出jar中的哪一个文件带有启动应用程序的main方法

    要点:

    面对对象设计扩展功能不需要改动之前已经测试好的程序代码

    所有的Java程序都定义在类中。

    类如同蓝图描述该类型的对象要如何创建

    对象自治;你无需在意它如何完成任务。

    对象有已知的事物,并能执行工作。

    对象本身已知道的事物称为实例变量,它代表对象的状态。

    对象可执行的动作称为方法,它代表对象的行为。

    类可以继承较为抽象的父类。

  • 相关阅读:
    状压DP【p1879】[USACO06NOV]玉米田Corn Fields
    Tarjan缩点+Spfa最长路【p3627】[APIO2009] 抢掠计划
    Tarjan缩点【p1726】上白泽慧音
    分层图【p4822】[BJWC2012]冻结
    Tarjan缩点+LCA【p2783】有机化学之神偶尔会做作弊
    线段树【p1607】[USACO09FEB]庙会班车Fair Shuttle
    better-scroll踩坑合集
    在浏览器上安装 Vue Devtools工具
    无法执行vue初始化命令
    vue-cli创建第一个项目(用git bash解决上下键移动选择问题)
  • 原文地址:https://www.cnblogs.com/six-moon/p/4667247.html
Copyright © 2011-2022 走看看