oop design 分为以下几个方面:

- encapsulation and modularity(封装和模块化)

- API/Client interface design(API 接口给调用类者)

- Inheritance hierarchy and interfaces(继承和继承的层次关系)

这里先介绍一个modularity模块化:

一个大的系统是很复杂的, 可能包含了很多复杂的部分, 如果编码中的一个部分可以独立出来而被其他部分所使用, 例如之前的cs106中的画火车的例子, 程序经过软件设计工程分解成小任务后, 不是直接开始编码, 而是看看有哪些部分可以独立出来, 这个独立出来的部分可以被很多子任务所使用(例如画车厢), 火车的车头, 车身和车尾都能利用上, 这个就是模块化 modularity – keep components as separate and independent from each other as possible. 同时, 将哪些部分独立编码进行模块化是需要很多经验的.

Standard Model OOP class Design(标准类设计)

  • Easy for the Client, 做到用户不用读文档, 就能很好的使用你提供的API.
  • Data private
  • one or more constructors(最好多个构造方法)
  • public getters, 给用户提供一些获得部分data的get方法.
  • public setters, 这个可以增加逻辑判断, 看用户修改的部分数据是否合理.
  • Methods as Transactions(参考了数据库中的transactions, 也就是说一个方法执行前是一个状态, 执行后是一个状态, 如果执行过程中出现问题, 那么要退回到执行前的状态并返回一个message)
  • Pirvate utility, You may decompose out a method for your own use within your class – declare it private unless there’s a good reason to expose it for client use.

继承

oop中经常出现的错误就是到处都是继承.

In java, no matter what code is being executed, the receiver object never forgets its class.

Student s; 这个声明的含义是什么 ?

s points to an object that responds to all the messages that Sutdents respond to

s points to a Student, or a subclass of Student

继承的语法与特点

subclass problems:

1. construct the part of the object that is inherited, using the superclass

在构造函数的第一行, 执行 super(arguments)

2. construct the part of the object due to the class itself.

在构造函数的第一行, 调用自己的另外一个构造函数

覆盖 即 重写

To override a method, a subclass just defines a method with exactly the same prototype – same name and arguments. With Java 5, you can provide an @Override annotation just before the method, and the compiler will check for you that it matches some superclass method.

断言方法

一般使用 is 或 has 开头的返回 boolean 的方法

IS-a : 子类是一个父类, has-a: 一个类中有另一个类作为此类的一部分

instance of : 一个 object 判断是否是一个类的实例, 例如: Student s = new Student(); s instanceof Student

Object class 提供哪些方法:

  • toString()
  • equals(Object other)
  • int hashCOde() allows an object to be a key in a HashMap, HashCode should be fast to compute. if a class does not implements hashCode() then it cannot be a key in a Hashmap

cs108 04 oop design的更多相关文章

  1. scala 学习笔记(04) OOP(上)主从构造器/私有属性/伴生对象(单例静态类)/apply方法/嵌套类

    一.主从构造器 java中构造函数没有主.从之分,只有构造器重载,但在scala中,每个类都有一个主构造器,在定义class时,如果啥也没写,默认有一个xxx()的主构造器 class Person ...

  2. C#语言-04.OOP基础

    a. OOP:面对对象思想 i. 类:是一种功能强大的数据类型,而且是面向对象的基础 . 语法:访问修饰符 class 类名{ //类的主体 } . 成员变量:不以“函数”形式体现 a. 常量:代表与 ...

  3. LN : Eden Polymorphic And OOP Design Pattern Abstract Factory

    Appreciation to our TA, +7, who designed this task. Client.cpp #include <iostream> #include &l ...

  4. 【翻译】设计模式学习系列1---【Design Patterns Simplified: Part 1【设计模式简述:第一部分】】

    原文链接:http://www.c-sharpcorner.com/UploadFile/19b1bd/design-patterns-simplified-part1/ Design Pattern ...

  5. 谷歌Web中国开发手册:1目的&amp;夹

    原版的:https://developers.google.com/web/fundamentals/getting-started/your-first-multi-screen-site/ 该网站 ...

  6. New需谨慎

    New is Glue When you’re working in a strongly typed language like C# or Visual Basic, instantiating ...

  7. (转)Awesome Courses

    Awesome Courses  Introduction There is a lot of hidden treasure lying within university pages scatte ...

  8. Creating a new dynamic form project, business modeling.

    The domain logic is like there are a bunch of objects, as well as a lot of configurations, according ...

  9. S03_CH05_AXI_DMA_HDMI图像输出

    S03_CH05_AXI_DMA_HDMI图像输出 5.1概述 本课程是在前面课程基础上添加HDMI IP 实现HDMI视频图像的输出.本课程出了多了HDMI输出接口,其他内容和<S03_CH0 ...

随机推荐

  1. 《JAVA与模式》之适配器模式(转载)

    适配器模式比较简单,偷个懒,直接转载一篇. 个人理解: * 类适配器是通过继承来完成适配 * 对象适配器是通过传递对象来完成适配 * 不管哪种,其实都是通过引用特殊接口的对象来完成特殊接口的适配调用 ...

  2. 转 web前端性能分析--实践篇

    当我们知道了web前端性能的关键点后,那么接下来要做的就是如何去具体实施并获取这些关键点的数据了.通过前面的学习知道了不少好的工具,经过对比后个人觉得dynatrace还是不错的. 不仅支持ie,ff ...

  3. 阅读《Android 从入门到精通》(17)——进度条

    进度条(ProgressBar) java.lang.Object; android.view.View; android.widget.ProgressBar; ProgressBar 类方法 Pr ...

  4. .NET设计模式(4):建造者模式(Builder Pattern)(转载)

    概述 在 软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧 烈的变化,但是将它们组合在一起的算法确相对稳 ...

  5. jenkins构建自动执行jmeter 发送http请求,中间有替换参数路径

    #在构建目录下创建jmeter目录,在这个目录下面执行jmeter性能测试mkdir -p $WORKSPACE/target/apache-jmeter-3.1/#复制jmeter文件到执行测试目录 ...

  6. mac下设置redis开机启动方法

    Mac OS 的开机启动方式 launchd 是 Mac OS 下用于初始化系统环境的关键进程,它是内核装载成功之后在OS环境下启动的第一个进程.其实它的作用就是我们平时说的守护进程,简单来说,用户守 ...

  7. [Jobdu] 题目1463:招聘会

    题目描述: 又到毕业季,很多大公司来学校招聘,招聘会分散在不同时间段,小明想知道自己最多能完整的参加多少个招聘会(参加一个招聘会的时候不能中断或离开). 输入: 第一行n,有n个招聘会,接下来n行每行 ...

  8. [na]acl拒绝访问流量审计

    acl审计拒绝的流量及拒绝提示 interface Ethernet0/0 ip address 12.1.1.2 255.255.255.0 ip access-group 10 in half-d ...

  9. [gj]HK一行所见闻

    香港一行 20多年来,未未去过HK,前段时间由于工作关系去了趟HK.感触良多. 一清早,福田过关,做火车,做地铁,一通到了目的地. 总结对那边的印象: 1,所有人都是粤语,包括工作交流.而且他们不怎么 ...

  10. feginclient和hystrix的配置

    1.如果设置了 feign: hystrix: enabled: true 则 @FeignClient(value = "service-hi",configuration = ...