浏览器标题切换
浏览器标题切换end

寒假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关键字声明。

posted @   抓水母的派大星  阅读(118)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示