面向对象与生活学习笔记--盛大创新学院(高翔)
1,对象与责任
2,对象与时间
3,对象与现实世界
一、对象与责任:
复习多态的实现:
(1)继承
public abstract class Animal(){public abstract string Bark();}
public class Dog():Anmial{public override string Bark(){return "汪汪";}}
public class Cat():Anmial{public override string Bark(){return "喵喵";}}
(2)接口public interface IBarkble(){string Bark();}
public class Dog():IBarkble{public string Bark(){return "汪汪";}}
public class Cat():IBarkble{public string Bark(){return "喵喵";}}
区别:
继承实现要求继承者和被继承者是 is a 的关系,eg:Cat is a Animal
接口实现要求实现者具有某一种功能或提供某一种服务,eg:Cat can Bark
独揽责任==>分摊责任的设计实现:
public class Goods()
{
pulbic string Id{get;set;}
pulbic string Name{get;set;}
pulbic decimal Price{get;set;}
pulbic decimal GoodsType{get;set;} //变更
pulbic decimal Discount{get;set;} //变更
}
public class PaymentService()
{
public void Pay(Goods goods)
{//ToDo}
public void Pay(Goods goods) //变更
{//验证GoodsType和Discount以处理付款}
}
//从上面看PaymentService担负着计算折扣的所有自责,为什么不让每一个Goods自己承担折扣责任??
===开始改造之路======>
public interface IChargable(){void pay();}
public abstract class Goods:IChargable()
{
pulbic string Id{get;set;}
pulbic string Name{get;set;}
pulbic decimal Price{get;set;}
pulbic decimal GoodsType{get;set;} //去掉
pulbic decimal Discount{get;set;} //去掉
public abstract void Pay(); //新增
}
public class Book:Goods
{public override void Pay(){//8折;}} //每一种的商品变化更灵活
public class Clothes:Goods
{public override void Pay(){//满2000减300;}} //每一种的商品变化更灵活
User.Sit(Chair chair)?
Chair.Sit(User user)?
尽量使用被动定义,因为表示的是一种责任,一种能提供的服务,就是让别人知道你能做什么。
体会:在设计时考虑职责的分配,让实体对象更具活力。
学习面向对象的几个问题
(1)面向对象宣称:比面向过程更能适应变化,但是现实中一个变化却总是让我们焦头烂额?
(2)C#提供了很多特性,比如事件,委托,重写等等,为什么我做项基本没有用上?
(3)经典教科书说,对象应该既有字段,又有方法;为什么我们的项目要么只有字段,要么只有方法?
因为在设计层面上没有为对象赋予相应的职责,或者职责的分配有问题。
(4)我知道设计模式很重要,我也学了,但是为什么总觉得用不上?
从对象思维==>模式思维《Design Patterns Explained》
(5)如何学习面向对象?
A:面向对象无需学习,每个人天生就会。一个建议就是尽量在设计阶段不考虑数据存储,而是将数据库理解为磁盘上的对象集合。
B:模式是重构来的。
无稽之谈!能在结束后还对系统重构的项目少之又少。最好的方法就是在设计初期就考虑好变化点,引入模式,当然这需要经验。
严重声明:本文版权属原作者所有 本文重在收藏和学习
原文地址:http://www.cnblogs.com/jackyfee/archive/2011/03/29/oop.html