zoukankan      html  css  js  c++  java
  • 4. 面向对象

    4. 面向对象

    4.1 面向对象

    面向对象程序设计,简称OOP是当今主流的程序设计范型。Java是完全面向对象的。

    面向对象的程序是由对象组成的,每个对象包含对用户公开的特定功能部分和隐藏的实现部分。程序中的很多对象来自标准库,还有一些是自定义的。在OOP中,不必关心对象的具体实现,只要能够满足用户的需求即可。

    面向对象是一种思想,能让复杂问题简单化,程序员不需要了解具体的实现过程,只需要指挥对象去实现功能。

    4.1.1 类

    类:对现实生活中事物的描述。

    类是构造对象的模板或蓝图。由类构造对象的过程称为创建类的实例。

    封装是与对象有关的一个重要概念。从形式上看,封装不过是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式。对象中的数据称为实例域,操纵数据的过程称为方法。对于每个特定的类实例(对象)都有一组特定的实例域值。

    • 类关系UML符号对照表:

    image-20200901003229425

    4.1.2 对象

    对象:就是事物,实实在在存在的个体。

    要想使用OOP,一定要清楚对象的三个主要特性:

    • 对象的行为 -- 可以对对象施加哪些操作/方法
    • 对象的状态 -- 当施加方法时,对象如何响应
    • 对象标识 -- 如何辨别具有相同行为与状态的不同对象

    4.1.3 类之间的关系

    • 依赖:users-a
    • 聚合:has-a
    • 继承:is-a

    4.2 用户自定义类

    4.2.1 构造器

    • 构造器与类同名

    • 每个类可以有一个以上的构造器

    • 构造器可以有0个、1个或多个参数

    • 构造器没有返回值

    • 构造器总是伴随着new操作一起调用

    4.2.2 隐式参数与显示参数

    显示参数明显地列在方法声明中,隐式参数没有在方法声明中。

    在每一个方法中,关键字this表示隐式参数。

    4.2.3 final实例域

    可以将实例域定义为final。构建对象时必须初始化这样的域。必须确保在每一个构造器执行之后,这个域的值被设置,并且在后面的操作中,不能够再对它进行修改。

    final修饰符大都应用于基本类型域,或不可变类的域中的每个方法都不会改变其对象,这种类就是不可变的类。

    4.3 静态域与静态方法

    4.3.1 静态域

    如果将域定义为static,每个类中只有一个这样的域。而每一个对象对于所有的实例域却都有自己的一份拷贝。

    4.3.2 静态常量

    由于每个类对象都可以对公有域进行修改,所以,最好不要将域设计为public。

    4.3.3 静态方法

    静态方法是一种不能向对象实施操作的方法。

    4.4 对象构造

    4.4.1 重载

    一个类可以有多个构造器。

    StringBuilder messages = new StringBuilder();
    
    StringBuilder todoList = new StringBuilder("To Do:
    ");
    

    上面的特征叫做重载。多个方法有相同的名字不同的参数,便产生了重载。

    Java允许重载任何访法,而不只是构造器方法。

    4.4.2 默认域初始化

    如果在构造器中没有显式地给域赋予初值,那么就会被自动地赋为默认值:数值为0、布尔值为false、对象引用为null。

    4.4.3 无参数的构造器

    很多类都包含一个无参数的构造函数,对象由无参数构造函数创建时,其状态会设置为适当的默认值。仅当类没有提供任何构造器的时候,系统才会提供一个默认的构造器。如果在编写类的时候,给出了一个构造器,哪怕是和简单的,要想让这个类的用户能够构造实例new ClassName(),就必须提供一个默认的构造器(不带参数的构造器)。

    4.4.4 关键字this

    • 关键字this引用方法的隐式参数。

    • 如果构造器的第一个语句为:this(…),这个构造器将调用同一个类的另一个构造器。

    • public Demo(double s) {
          // calls Demo(String, double)
          this("Demo #" + nextId, s);
          nextId++;
      }
      

      当调用new Demo(6000)时,Demo(double)构造器将调用Demo(String, double)构造器。

    4.4.5 对象析构与finalize方法

    在析构器重,最常见的操作是回收分配给对象的存储空间。对于Java有自动的垃圾回收器,不需要人工回收内存,所以Java不支持析构器。当然,某些对象使用了内存之外的其他资源。在这种情况下,当资源不再需要时,将其回收和再利用将显得十分重要。

    可以为一个类添加finalize方法。finalize方法将在垃圾回收器清除对象之前调用。

    4.5 注释

    关于注释,前文已经略有讲到,此处就不过多赘述,本节主要是拿出几个重要地方记录下来。

    4.5.1 方法注释

    • @param变量描述:对当前方法的“param”参数部分添加一个条目。
    • @return描述:对当前方法添加“return”返回部分。
    • @throws类描述:将添加一个注释,用于标识这个方法有可能抛出异常。

    4.5.2 通用注释

    • @author姓名:将产生一个作者条目
    • @version文本:将产生一个版本条目
    • @since文本:始于条目
    • @deprecated文本:对类、方法或变量添加一个不再使用的注释。
    • @see引用

    4.6 类设计技巧

    1. 一定要保证数据私有
    2. 一定要对数据初始化
    3. 不要在类中使用过多的基本类型
    4. 不是所有的域都需要独立的域访问器和域更改器
    5. 将职责过多的类进行分解
    6. 类名和方法名要能够体现它们的职责
    7. 优先使用不可变得类
    都说酒是陈的香。
  • 相关阅读:
    课后作业-阅读任务-阅读笔记-4
    团队编程项目作业5-小组评分
    课后作业-阅读任务-阅读提问-3
    20171110-构建之法:现代软件工程-阅读笔记
    团队-中国象棋-开发文档
    结对-贪吃蛇-结对项目总结
    20171129-构建之法:现代软件工程-阅读笔记
    课后作业-阅读任务-阅读提问-4
    软件工程课程总结
    团队-石头剪刀布-项目总结
  • 原文地址:https://www.cnblogs.com/yihangjou/p/13593883.html
Copyright © 2011-2022 走看看