(一)面向对象基础

(一)面向对象基础

本文对面向对象基础进行一个简单回顾,方便之后理解各种有趣的设计模式,几分钟就可读完。

前言

本人本科专业为软件工程,曾参加过一些算法方面竞赛,因为对研究方面较感兴趣,也是为了进一步扩展知识面,研究生阶段开始投入HCI方面研究,主要是针对视觉方面的人机交互人体目标检测进行研究。

在研究生刚开始阶段曾和实验室小伙伴协同开发过两个企业级WEB方面项目,预计今年九月份都能正式上线:

当然,在这期间也曾遇到项目重构、Bug接连不断等各方面问题,在了解自己能力尚且不足同时,越来越明白设计模式、高内聚低耦合、程序规范化、质量检测等在项目开发中真正的重要性。无论做python开发还是以后做研究,工程类的项目,该思想应该都有值得借鉴之处。因此我准备在文章分类里多添加一个设计模式的分类,在这里对主要经典常用的一些设计模式进行相关介绍总结。相信整体浏览下来你一定能受益匪浅。

知识理解

  1. 类与实例化

    • 类:具有相同属性和功能的对象的集合;
      那么为什么要用类和实例而不是传统的函数调用呢,这就相当于如果居委会的电视放在你家里,而别人家里没有,于是街坊邻里都要到你家来看电视(函数调用),这样并不合适。所以正确的办法应该是将公用的方法放在居委会(类文件)。
    • 实例:类的具体对象;
      实例化相当于从类工厂又生产出一台电视,任何需要的地方都可以实例化它。
  2. 构造方法与方法重载

    • 构造方法:
      对类进行初始化,比如对于一个猫的实例,我们希望一出生就可以有姓名,那么就应该写一个有参数的构造方法:
      1
      2
      Cat cat1 = new Cat("喵喵")
      Cat cat2 = new Cat("咪咪")
    • 方法重载:
      提供了创建同名的多个方法能力,可以在不改变原方法基础上,新增功能;重载也算是提供了方法的可扩展能力,比如实例化一个猫的时候给它起不起名字都可以:
      1
      2
      Cat cat1 = new Cat()
      Cat cat2 = new Cat("喵喵")
  3. 属性与修饰符
    属性的getter setter作用是添加控制;
    修饰符常用的有public private

  4. 封装继承多态

    • 封装:
      每个对象都包含它能进行操作所需要的所有信息
    • 继承:
      (Java中构造方法不能被继承,继承使得修改和扩展都变得容易,但也增大了两个类之间的耦合性以及破坏包装,将父类暴露给子类)
    • 多态:
      不同的对象可以执行相同动作,但要通过它们自己的实现代码来执行。比如说有一对父子是表演“京剧”的,有一天父亲发高烧上不了台表演,退票的话肯定会大大影响声誉,于是就决定让儿子代父亲上台表演。
      这里有几点需要注意:(一)子类以父类的身份出现;(二)子类在工作时以自己的方式来实现;(三)子类以父类身份出现时,子类特有属性和方法不可以使用
      1
      2
      3
      arrayAnimal = new Animal[2];
      arrayAnimal[0] = new Cat("小花");
      arrayAnimal[1] = new Dog("阿毛");
  5. 重构
    采用合适的设计模式对原先结构进行重新构建

  6. 抽象类与接口

    • 抽象类:
      实例化没有任何意义不能实例化的类
      例如说一只猫长得什么样可以想象 ,说动物长什么样,没办法知道。抽象方法必须被子类重写,如果一个类中包含抽象方法也一定是抽象类;实际中看具体情况看父类是否需要改成抽象类。
    • 接口:
      接口是将隐式公共方法和属性组合起来,以封装特定功能的集合。以下图为例,比如变出东西是小叮当、孙悟空、猪八戒分别具备的功能,如果为了更具有普遍意义而让它们的父类也具有此种功能,显然是不合适的,比如猫并不具备变出来东西功能。所以为了将特定行为进行抽样,采用接口。主要需要注意的是接口与抽象类的区别与联系:
      抽象类 接口
      对类的抽取 对行为的抽取
      对一些相似类对象,用继承抽象类 若行为跨越不同类的对象可使用接口
      抽象类是从子类中泛化出父类 接口是不知道子类的存在,预先定义
      一个类只能继承一个抽象类 一个类可继承多个接口
  1. 集合与泛型

    • 集合:用于对数据进行存储和检索的专用类叫做集合
      比如说ArrayList集合就是对IList接口的实现;
    • 泛型是具有占位符(参数类型)的类、结构、接口、方法
      泛型集合可以将类型参数作为它所存储对对象类型的占位符。
      1
      List <Animal> arraylist;s
  2. 委托与事件

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×