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


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

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

  • 相关阅读:
    第四十六节:后台托管服务(DI的两种写法)、数据校验规则(内置、 FluentValidation)、程序发布部署
    第四十七节:Asp.Net Core5.x 升级到 Core6.x 版本写法的变化
    函数使用typescript
    Project任务手动导出到Excel(显示三级任务)
    MySQL新增、修改字段并添加默认值和备注
    好消息,Delphi中间件,Delphi二开平台,Delphi低代码开发平台作者促销
    hash和history路由的区别
    vue面试总结2022
    C#.NET 国密SM4加密解密 CBC ECB 2种模式
    未能加载文件或程序集“SissPayWebApi”或它的某一个依赖项。试图加载格式不正确
  • 原文地址:https://www.cnblogs.com/jackyfei/p/OOP.html
Copyright © 2020-2023  润新知