温故而知新 OOP
设计原则1:
找出应用中可能需要发生改变的地方,把它们独立出来,不要和那些不需要变化的代码混在一起
换句话说,如果每次新的需求一来,都会使某方面的代码发生变化,此时你就可以确定,这部分代码属于不稳定代码,需要和其他代码有所区分。以便以后可以轻易的改动和扩充此部分。而不影响稳定的部分
设计原则2:
针对接口编程,而不针对实现编程
真正的意思是针对超类型(supertype)编程,关键就在于利用多态。那么何为超类型呢?通常是一个抽象类或者一个接口。
可以在继承一个类的时候同时实现多个接口:
class 子类 extends 父类 implemtns 接口1, 接口2, ... { ...... }
抽象类和接口的区别
接口是特殊的抽象类,也可以看做是一个模型的规范。接口与抽象类大致区别如下:
- 一个子类如果 implements 一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可。
- 如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名将不受影响,只是变成了一个新的方法而已(相对老的方法实现)。
- 抽象类只能单继承,当一个子类需要实现的功能需要继承自多个父类时,就必须使用接口。
1、抽象类可以给出一些成员的实现,接口却不包含成员的实现;
2、抽象类的抽象成员可被子类部分实现,接口的成员需要实现类完全实现;
3、一个类只能继承一个抽象类,但可以实现多个接口。
3、最关键一点是,从设计角度来说,抽象类是从子类中发现了公共的东西,从而泛化出了父类,然后子类继承父类,从而避免了重复代码。而接口是根本不知道子类的存在,甚至不知道方法该如何实现,所以接口是预先定义的。先有一个Cat类,然后又Dog类,这是我们发现Cat和Dog中有很多类似之处,于是泛化出了Animal类,这也体现了敏捷开发的思想,通过重构改善既有代码的设计。事实上,只有Cat时就能设计出一个Animal类,但是这就极有可能成为过度设计了,所以抽象类往往是通过重构得来的。
2、如果行为跨越不同类的对象,如鸟和飞机,可使用接口;对于一些相似的类对象,用继承抽象类实现吧。比如猫狗猪猴,他们其实都是动物,之间有很多相似的地方,所以应该考虑让他们继承动物这个抽象类;而鸟和飞机是完全不相关的类,但是他们又有共同点,都会飞,所以这时用接口来实现就很合适了。另外注意接口和抽象类并不冲突,我完全可以让鸟继承动物这个抽象类,再实现IFly这个接口。
温故而知新 OOP的更多相关文章
- java温故而知新(9)OOP(面向对象编程)理念
Object Oriented Programming (面向对象的程序设计) 1.定义 面向对象程序设计(OOP)的具体定义很难下,也很容易因此而引起争论,在 Object-Orie ...
- 温故而知新--day2
温故而知新--day2 类 类与对象 类是一个抽象的概念,是指对现实生活中一类具有共同特征的事物的抽象.其实列化后称为对象.类里面由类属性组成,类属性可以分为数据属性和函数属性(函数属性又称为类方法) ...
- c#面向对象基础技能——学习笔记(二)基于OOP思想研究对象的【属性】
字段(成员变量): 字段只能从对象中访问实例字段,无法直接从类中访问(换言之,不创建实例就不能访问),可以理解为:字段一般用在内部数据交互使用,当需要为外部提供数据时,(要优先使用自动实现的属性而不是 ...
- 一个简单oop的changeTab
好多地方都会用到这样一个效果“点击tab切换内容页”,根据自己的想法实现了一下,写了个简单的插件.以前写代码都是标准的函数式编程,现在觉得面向对象编程看起来比较爽,并且更容易维护,于是就用oop的思想 ...
- Python OOP(面向对象编程)
一OOP的作用 在Python中,类是面向对象设计(OOP)的主要工具.通过使用类这种工具,OOP可以: 1.分解代码,最小化代码的冗余. 2.通过定制现有的代码,来编写新的程序,而不用在原处进行修改 ...
- OOP,WEB开发实用小技巧
偶然读到一篇博客,记录一下心得.这种设计对于新手来说一般是想不到的,它充分的发挥了OOP语言的特性,让代码专用而清爽.这是不是重构的思想呢? 我们在写业务层的时候,有很多方法是重复功能的,我们就可以使 ...
- 从OOP的角度看Golang
资料来源 https://github.com/luciotato/golang-notes/blob/master/OOP.md?hmsr=toutiao.io&utm_medium=tou ...
- 玩转JavaScript OOP[2]——类的实现
概述 当我们在谈论面向对象编程时,我们在谈论什么?我们首先谈论的是一些概念:对象.类.封装.继承.多态.对象和类是面向对象的基础,封装.继承和多态是面向对象编程的三大特性. JavaScript提供了 ...
- Atitit 面向对象编程(OOP)、面向组件编程(COP)、面向方面编程(AOP)和面向服务编程(SOP)的区别和联系
Atitit 面向对象编程(OOP).面向组件编程(COP).面向方面编程(AOP)和面向服务编程(SOP)的区别和联系 1. 面向组件编程(COP) 所以,组件比起对象来的进步就在于通用的规范的引入 ...
随机推荐
- Linux查看系统配置常用命令
Linux查看系统配置常用命令: 系统 # uname -a # 查看内核/操作系统/CPU信息# head -n 1 /etc/issue # 查看操作系统版本# cat /proc/cpuinfo ...
- Css3 提示框
<div class="arrow_box"><span>xxy is a so cool boy</span></div> css ...
- Swift3.0语言教程使用编码创建和初始化字符串
Swift3.0语言教程使用编码创建和初始化字符串 使用编码创建和初始化字符串 创建和初始化字符串除了可以使用上文中提到的方法外,还可以使用init(coder:)方法,此方法一般不常使用,其语法形式 ...
- css写带边框的三角形
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- Codeforces Round #335 (Div. 2)
水 A - Magic Spheres 这题也卡了很久很久,关键是“至少”,所以只要判断多出来的是否比需要的多就行了. #include <bits/stdc++.h> using nam ...
- #ASP.NET Core 1.0 Key Features
Cross platform support and flexible runtime engine(跨平台支持和灵活的运行时引擎) ASP.NET Core 1.0 offers support f ...
- 来抢你们IT狗的饭碗了
Java,Html,Css,JavaScript,Jsp啥都不会啊 ,等着我!
- ural 2071. Juice Cocktails
2071. Juice Cocktails Time limit: 1.0 secondMemory limit: 64 MB Once n Denchiks come to the bar and ...
- oralce CASE WHEN 用法
如何将时间日期分隔成“上半月”“下半月” select ( THEN '上半月' THEN '下半月' ELSE 'NULL' END) AS mon from BFBHDD8.SKTXSJL
- BZOJ 1475 & 1324 && 建图最小割
题意: 给一个矩阵,取其中一方格中的数,满足所有所取方格不相邻. SOL: 典型一个二分图,染色后不相邻的连边即可.跑个最大流,裸裸哒. Code: 代码没什么时间写了...并不是很想贴...都是贴板 ...