zoukankan      html  css  js  c++  java
  • 《面向对象》读书笔记4

    第四章 面向对象编程技术:去除冗余、进行整理

    4.1 OOP具有结构化语言所没有的三种结构

    类、多态和继承。

    打个比方,哪些让人无法着手,难以理解的程序就像一个乱七八糟的房间。由于无法马上再这样的房间里找到需要的东西,所以我们很有可能会再次购买,或者即使将房间的某一处打扫整理干净,周围也依然是乱作一团。如果要保持清洁,平时就要多加注意,此外还需要使用清理不必要的物品(去除冗余)的吸尘器和规整 物品(整理)的收纳架。
    OOp的三种结构为程序员提供了去除冗余逻辑、进行整理的功能结构。
    类结构将紧密管理的子程序(函数)和全局变量汇总到一起,创建大粒度的软件构件。通过该结构,我们能够将之前分散的子程序和变量加以整理。多态和继承能够将公用子程序无法很好地处理的重复代码进行整合,彻底消除源代码的冗余。如果我们能够使用这些结构开发出通用性较高的功能,那么就可以实现多个应用程序之间的大规模重用了。

    4.2 OOP的结构会根据编程语言的不同而略有差异

    4.3 三大要素之一:类具有的三种功能

    首先介绍三大要素中的第一个要素——类。
    这里我们将类的功能总结为汇总(子程序和变量)、
    隐藏(只在类内部使用的变量和子程序)和
    “创建多个”(一个类创建多个实例)。

    4.4 类的功能之一:汇总

    //采用结构化编程的文件访问处理
    //存储正在访问的文件编号的全局变量
    int fileNo;
    
    //打开文件的子程序
    //通过参数接收路径名
    void openFile(String pathName){
      /*省略逻辑处理*/
    }
    
    //关闭文件的子程序
    void closeFile(){
      /*省略逻辑处理*/
    }
    
    //从文件读取一个字符的子程序
    char readFile(){
      /*省逻辑处理*/
    }
    
    

    类能汇总变量和子程序。这里所说的变量是指比如C语言中的全局变量。OOP中将类汇总的子程序称为方法,将全局变量称为实例变量(又称为“属性”字段),之后我们会根据情况使用这些术语。

    //使用类进行汇总
    class TextFileReader{
      // 存储正在访问的文件编号的变量
      int fileNo;
      
      //打开文件()通过参数接收路径名
      void open(String pathName){
        ...
      }
    
      //关闭文件
       void close(){
        ...
      }
    
      //从文件读取一个字符
      char read(){
        ...
      }
    }
    
    

    虽然只是将子程序和变量汇总在一起而已,但汇总和整理操作本身就是有价值的。打个比方,收拾乱七八糟的屋子时,与其准备一个大箱子,不如准备多个向子分别存放衣服、CD、文具和小物件等,这样会更方便拿取物品,两者时同样的道理。

    可以想像以下企业基础系统中使用的大规模应用程序,其代码往往有几十甚至几百万行。如果使用C语言平均为每个子程序编写50到100行代码,那么子程序就有几千到几万个。如果使用OOP平均再每个类中汇总10个子程序,那么类总数就会比子程序总数少一位,为几百到几千个。当然即便数量依然庞大,但所有构件的数量消减1位的效果是不容小觑的(另外,关于为了进一步整理大规模的软件而将多个类进行分组的“包”功能,后文介绍)

    汇总的效果不只是减少整体构件数量。在汇总到类中时我们还略微对子程序的名称进行了修改。
    为汇总后的类起合适的名称也便于查找子程序。虽然这个步骤看起来并不起眼,但它却是促进可重用的重要功能之一。无论编写的子程序质量有多高,如果因为数量太多而难以查找和调用,那么也是没有任何意义的。反之如果编写的子程序便于查找,那么对其进行重用的机会也会增加。
    我们来总结以下汇总功能:
    能够将紧密联系的(多个)子程序和(多个)全局变量汇总到一个类中。
    优点如下

    • 构件的数量会减少
    • 方法(子程序)的命名变得轻松
    • 方法(子程序)变得容易查找

    4.5 类的功能之二:隐藏

    接下来我们看看隐藏功能。
    TextFileReader类中的open、close、read方法会访问fileNo变量,但其他处理则无需访问,因此最好限定够为只有这三个方法能访问该变量。

    class TestFileReader{
      private int fileNo;
    
      public void open(String pathName){
        ...
      }
      
      public void close(){
        ...
      }
    
      public void read(){
        ...
      } 
    }
    

    能对其他类隐藏类中定义的变量和方法。这样一来,我们在写程序时就可已不使用全局变量了。

    4.6 类的功能之三:创建很多个

    4.7 实例变量是限定访问范围的全局变量

    4.8三大要素之二:实现调用端公用化的多态

    4.9三大要素之三:去除类的重复定义的继承

  • 相关阅读:
    试图加载格式不正确的程序。 (异常来自 HRESULT:0x8007000B)
    git 撤销刚提交的 commint
    At least one cache should be provided per cache operation.
    @Primary注解
    怎么把sql server数据导入mysql本地数据库?
    应用程序已预编译,因此不允许使用目录“/App_Code/”
    SpringBoot学习笔记15——Dozer的使用用来两个对象之间属性转换的工具
    Invalid packaging for parent POM (pom.xml), must be "pom" but is "jar" @ pom.xml
    浏览器调试console的多种用法
    bug本天成,妙手偶得之。
  • 原文地址:https://www.cnblogs.com/ldbstart/p/14435948.html
Copyright © 2011-2022 走看看