zoukankan      html  css  js  c++  java
  • 面向对象与生活学习笔记盛大创新学院(高翔)

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

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

  • 相关阅读:
    BIOS详解:什么是BIOS ?BIOS的作用?CMOS及其与BIOS的关系?
    随机数不随机
    解决hexo神烦的DTraceProviderBindings MODULE_NOT_FOUND
    保护模式特权级别DPL,RPL,CPL 之间的联系和区别
    Linux内核 hlist_head/hlist_node结构解析
    x86中的页表结构和页表项格式
    Linux下/proc目录简介
    bdev文件系统
    X86 IO端口和MMIO
    Mac OS Alfred 2 tips
  • 原文地址:https://www.cnblogs.com/jackyfei/p/OOP.html
Copyright © 2011-2022 走看看