Jackyfei

面向对象与生活学习笔记--盛大创新学院(高翔)

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:模式是重构来的。

    无稽之谈!能在结束后还对系统重构的项目少之又少。最好的方法就是在设计初期就考虑好变化点,引入模式,当然这需要经验。

posted @ 2011-03-29 11:39  张飞洪[厦门]  阅读(714)  评论(1编辑  收藏  举报