zoukankan      html  css  js  c++  java
  • 设计模式学习笔记(2)-面向对象基本概念和四大特性

    面向对象编程和面向对象编程语言

    面向对象编程(Object Oriented Programming) OOP
    面向对象编程语言(Object Oriented Programming Language)OOPL

    • 基础概念 : 类(class)、对象(object)
    • 面向对象编程是一种编程范式,以类和对象作为组织代码的基本单元,并将封装、抽象、集继承、多态作为代码设计实现的基石
    • 面向对象编程语言是支持类和对象语法机制,能方便使用四大特性的编程语言(并没有官方定义)

    面向对象编程和面向编程语言之间的联系

    面向对象编程一般是使用面向对象编程语言实现,但是不使用面向对象编程语言照样可以实现面向对象编程。即使是面向对象编程语言写的代码可能也是 面向过程风格的代码

    面向对象分析和面向对象设计

    • 做什么---面向对象分析

    • 怎么做---面向对象设计

    面向对象四大特性

    • 封装

      Java 通过 访问权限(public ,private等)来实现封装,如果对类中的属性不做限制,那任何代码都可以访问、修改类中的属性,这对于开发者来说是不可控的,你的代码可能在项目中被不同的代码调用,属性可以被随意修改意味着任何调用者的代码都可以修改,这会影响代码的可读性和可维护性,可以类比于我们的笔记本电脑,厂家通过一个壳子只给我们留下了键盘、鼠标、显示屏等外设,这极大的降低了我们使用电脑的难易度,如果厂家(开发者)将电脑的全部细节都暴露给我们(调用者),一会增加我们的使用难度,二会降低电脑的质量(随时都会因为我们的修改让电脑毁坏,毕竟不是每个人都很熟悉电脑的专业知识,类似不是每个员工都对项目的业务很熟悉,封装可以有效避免新员工(业务不熟)胡乱修改)

    • 继承

      继承表示 is-a关系,比如 “猫 --是--哺乳动物”,“麻雀--是--会飞的”,最大的好处是代码复用,将两个类共同的部分抽取到父类中,即抽取共性类,过度使用继承会导致继承层次复杂,代码的可读性可维护性变差,子类与父类高度耦合,修改父类代码会直接影响到子类,所以有多用组合少用继承的设计思想

    • 多态

      多态是指在程序运行过程中,子类可以替换父类,多态实现的几种方式包括

      1. 编程语言提供特殊的语法机制,比如Java中父类对象可以引用子类对象,比如继承,比如子类可以重写父类方法
      2. 通过接口类语法实现
      3. 利用duck-typing语法

      接口类语法:

      public interface Iterator{
          String hasNext();
          String next();
          String remove();
      }
      
      public class Array implements Iterator{
          private String[] data;
          
          public String hasNext(){...}
          public String next(){...}
          public String remove(){...}
      }
      
      public class LinkedList implements Iterator{
          private LinkedListNode head;
          
          public String hasNext(){...}
          public String next(){...}
          public String remove(){...}
      }
      
      public class Demo{
          private static void print(Iterator iterator){
              while(iterator.hasNext()){
                  System.out.println(iterator.next());
              }
          }
          
          
          public static void main(String...args){
              Iterator arrayIterator=new Array();
              Iterator linkedListIterator=new LinkedList();
              print(arrayIterator);
              print(linkedListIterator)
          }
      }
      

      duck-typing语法:

      Logger 和 DB 两个类没有任何关系,只要他们都定义了record方法就可以传到test方法中执行对应的record方法(这是一些动态语言特有的语法机制)

      class Logger:
          def record(self):
              print("i write a log")
      class DB:
          def record(self):
              print("i insert a record")
      def test(recorder):
          recorder.record()
      def demo():
          logger=Logger()
          db=DB()
          test(logger)
          test(db)
      

      多态特性能提高代码的可扩展性和复用性,一个test方法可以应用到Logger 和 DB 两个类上,一个print方法,可以打印Array 和 LinkedList 集合的数据,同时多态也是很多设计模式的实现基础

    • 抽象

      封装主要指的是如何隐藏信息,保护数据(类的属性),而抽象讲的是如何隐藏方法的具体实现,让调用者只关心方法提供了哪些功能,而并不需要知道是怎么实现的。抽象是一个宽泛的设计思想,是人类处理问题时候的一种手段,是一种从上而下的解决问题的思路,抛弃细节,站在森林之外去选择要哪棵树,也叫大局观或者宏观。课程中有一个例子,获取图片的方法,getAliyunPictureUrl() 就不是一个具有抽象思维的命名,因为如果图片不存在阿里云服务器上了,命名也要随之修改

    附上大牛课程

    http://gk.link/a/10fWa

    金钱和自由相比,不值一提
  • 相关阅读:
    C语言的数据、常量和变量
    C语言关键字、标识符和注释
    关于C/C++的一些讨论
    C++ 复合类型(上)
    C 函数
    C 字符输入输出和输入确认
    C++数据处理
    C控制语句:分支与跳转
    C++ 预备知识#关于C++
    范型在java中的应用
  • 原文地址:https://www.cnblogs.com/roadzhao/p/12291211.html
Copyright © 2011-2022 走看看