zoukankan      html  css  js  c++  java
  • 寒假Day37:设计模式(封装+继承+多态等)

    面向过程POP:分析解决问题的步骤(调用函数)

    优点:

    流程化使得编程任务明确,在开发之前基本考虑了实现方式和最终结果,具体步骤清楚,便于节点分析。

    效率高,面向过程强调代码的短小精悍,善于结合数据结构来开发高效率的程序。

    缺点:

    需要深入的思考,耗费精力,代码重用性低,扩展能力差,后期维护难度比较大。

    面向对象OOP:引入封装、继承、多态、类,三个特性:封装、继承、多态,把问题分解成一个个对象(对象=属性+方法)

    优点:

    结构清晰,程序是模块化和结构化,更加符合人类的思维方式;

    易扩展,代码重用率高,可继承,可覆盖,可以设计出低耦合的系统;

    易维护,系统低耦合的特点有利于减少程序的后期维护工作量。

    缺点:

    开销大,当要修改对象内部时,对象的属性不允许外部直接存取,所以要增加许多没有其他意义、只负责读或写的行为。这会为编程工作增加负担,增加运行开销,并且使程序显得臃肿。

    性能低,由于面向更高的逻辑抽象层,使得面向对象在实现的时候,不得不做出性能上面的牺牲,计算时间和空间存储大小都开销很大。

    面向对象程序设计中代码间的相关性低(低耦合特性),使得代码很容易被复用和扩展,同时也说明了面向过程的代码重用性低、扩展能力差。 

    实例化就是创建对象的过程,使用new关键字

    构造方法与类同名,在new的时候调用;是为了对类进行初始化,默认会生成空的构造方法,帮助用户实例化

     

    构造方法和普通方法都可以重载。

    方法重载提供了创建同名的多个方法的能力,但这些方法需要使用不同的参数类型

    方法重载时,两个方法名要相同,但参数类型或个数必须要有所不同。

    方法重载的好处:可以在不改变原方法的基础上增加功能。(提供了函数可扩展的能力)

    函数重载作用:函数名可以相同,提高复用性。

    函数重载满足条件:1:同一个作用域下,函数名称相同;2:函数参数类型不同或者个数不同或者顺序不同(注意:函数的返回值不可以作为函数重载的条件)

     

    修饰符:只允许同一个类中的成员进行访问,其他类包括它的子类都无法访问。

    protected:继承时子类可以对基类有完全访问权,对子类公开,对其他类不公开

     

    属性是public,所以一般首字母大写;

    字段是private,一般首字母小写或前面加  _

    封装的好处:减少耦合、类内部的实现可以自由修改、类具有清晰地对外接口

     

    继承(is-a):减少大量重复的代码,使得所有子类的公共部分都放在了父类,但增加了耦合性

    子类继承父类所有的特性,还可以定义新的特性

      

    如果子类继承于父类:子类拥有父类非private的属性和功能;子类还具有自己的属性和功能,可进行扩展;子类还可以以自己的方式实现父类的功能(方法重写)。

     

    多态表示不同的对象可以执行相同的动作,但要通过他们自己的实现代码来执行

    对象的声明是父类,实例化的对象是子类才能实现多态

    子类以父类的身份出现,但子类特有的属性和方法不可以使用;子类在工作时以自己的方式实现(父类)。

    方法重写:使用override关键字,子类将父类实现替换为它自己的实现

    virtual:表示此方法是虚方法,可以被子类重写

     

     

    抽象类:不能实例化,实例化是没有意义的;抽象方法是必须被子类重写的方法;如果类中包含抽象方法,那么类就必须定义为抽象类,不论是否还包含其它一般方法。目的:用来继承。(abstract 抽象类、抽象方法(无方法体))

     

    接口(interface声明):一旦类实现了接口,类就可以支持接口所指定的所有属性和成员;命名:前面加I;一个类可以支持多个接口;不能实例化。

    集合:

    因为有了IList接口,所以ArrayList提供添加、插入、删除某一范围元素的方法。

    命名空间:System.Collections

    使用:using System.Collections;

    集合的变化是影响全局的,始终保证元素的连续性。

    比如删除0和1位置上的元素,则需要RemoveAt(0)两次

    ArrayList不是类型安全的,需要类型匹配在Add的时候。使用集合元素需要执行拆箱操作,会有很大性能(资源、空间)损耗。

     

    泛型:

    泛型集合命名空间:using System.Collections.Generic;

    声明泛型集合变量,用接口List

    泛型集合List:避免了类型安全问题和拆箱装箱的性能问题。

     

    委托与事件

    委托对象用关键字delegate声明;

    事件对象用event关键字声明。

  • 相关阅读:
    写了一个单链表的代码,而且支持反转链表,分组反转链表
    【Redis】redis分布式锁(二)
    【Redis】redis分布式锁(一)
    【Flutter】跟着flutter教程学着写了一个简单的Demo
    【Zookeeper】Zookeeper集群环境搭建
    【TDengine】TDengine初探
    【Shell】一个可以服务拉起、停止和重启的shell脚本
    【Linux】xftp报“找不到匹配的outgoing encryption算法”的错误
    【Linux】Ubuntu如何开启ftp服务器
    【Jenkins】使用Jenkins编译打包后自动部署项目
  • 原文地址:https://www.cnblogs.com/OFSHK/p/12392907.html
Copyright © 2011-2022 走看看