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程序都定义在类中。

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

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

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

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

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

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

  • 相关阅读:
    UVA 1386 Cellular Automaton
    ZOJ 3331 Process the Tasks
    CodeForces 650B Image Preview
    CodeForces 650A Watchmen
    CodeForces 651B Beautiful Paintings
    CodeForces 651A Joysticks
    HUST 1601 Shepherd
    HUST 1602 Substring
    HUST 1600 Lucky Numbers
    POJ 3991 Seinfeld
  • 原文地址:https://www.cnblogs.com/six-moon/p/4667247.html
Copyright © 2011-2022 走看看