数据结构,面向对象,设计模式(小技巧),架构模式【开发框架MVC(大智慧)】

数据结构

面向对象(OO 就是 Object Oriented)

面向对象编程 (OOP Object Oriented Programming )
面向对象设计 (OOD Object Oriented Design)
数据结构 面向对象 的相关知识 可参考 菜鸟教程 https://www.runoob.com/cplusplus/cpp-classes-objects.html

// ************************ 单例模式 ************************//

// ************************ 工厂模式 ************************//
在本人的 设计模式MVC–>数据存储,视图UI,业务逻辑控制数据的传递 , 单例模式 , 工厂模式 的文章中可以找到
https://editor.csdn.net/md/?articleId=104888678

// ************************ 装饰器模式 ************************// 属于结构型模式
装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构。它是作为现有的类的一个包装。
用处:扩展一个类的功能。 2、动态增加功能,动态撤销。

// ************************ 代理模式 ************************//
1,定义接口类
2,定义一个真实类,继承并实现接口类
3,定义一个代理类。继承并实现接口类,实现对真实类的引用,调用真实类里面的具体实现
4,客户端,调用代理类实现对真实类的调用

// ************************ 观察者模式 ************************//
又叫发布订阅模式
角色抽象类,
角色具体类
观察者抽象类
观察者实现类,实现多个观察者的抽象类

策略模式

// ************************ 算法排序 ************************//
在本人的 数组斐波那契数列,排序等splice() 的文章中可以找到
https://editor.csdn.net/md/?articleId=102564637

// ************************ 堆和栈的区别 ************************//
栈—> 1,系统开辟的 2,连续的, 3 ,存放 值类型 的 存储空间 4,大小为2M 超过就会溢出
堆—> 2, 手动开辟的 2,不连续的 3,存放 引用类型 的 存储空间 4,大小由引用类型的大小决定
Heap(堆)

// ************************ 值类型和引用类型的区别 **********************//
值类型:(基本数据类型(如:int,float,bool等) , (结构体,枚举,空类型)
存放在

引用类型: 自定义的 (类,接口,委托),( 数组,字符串,Object)
存放到

// ************************ 拆箱 和 装箱 的区别 ************************//
拆箱:引用类型 转化为 值类型
装箱:值类型 转化为 引用类型

Garbage Collector(垃圾收集器)

回收的是堆上的内容
当 对象不再被引用了, 就会被GC检测回收
当把 对象 设置为Null 的时候, GC检测回收

面向对象

详细可参考 我的文章 https://editor.csdn.net/md/?articleId=102492381

// ************************ 对象 **********************//
对象:就是具有某类事务相同特征的 拥有(属性和方法)的某个类型
就是类的实例 就是程序设计的基本单元

// ************************ 面向对象 () ************************//
面向对象 是一种程序设计思想。把(对象)作为程序的基本单元

// ************************ 抽象 ***********************//
抽象
把某类事物具有相同的特性 { (数据)和(操作数据的方法) }抽离出来作(作为公用的数据和方法),就是抽象

// ************************ ** 类** ************************//
**类。**具有相同特性(属性)和行为(方法)的对象的抽象(抽离出来)形成模板 “类”。因此,对象的抽象是类,类的(实例化)就是对象,也可以说类
的实例是对象(实例化一个对象),类实际上就是一种数据类型。

// ************************ 抽象类 ************************//
抽象类。 抽象类不能被用于实例化对象,它只能作为接口使用,继承抽象类的子类 可以部分或完全实现父类中的方法

// ************************ 接口 ************************//
接口。 接口是一系列 没有实现的 抽象的 方法的 声明 , 需要由具体的类去实现(菜鸟教程定义)
接口中的方法 都是 抽象方法,继承 抽象类 的子类 必须完全实现父类中的抽象方法。

** 引用****
引用:1.引用概念;
引用是给已经存在的变量取了一个别名,编译器不会为引用变量开辟内存空间,它和它引用的变量共用同一块内存空间。
类型:&引用变量名(对象名)=引用实体;(注意:引用类型和引用实体是同种类型的)
void TestConstRef()
{
const int a = 10;
//int& ra = a; // 该语句编译时会出错,a为常量
const int& ra = a;
// int& b = 10; // 该语句编译时会出错,b为常量
const int& b = 10;
double d = 12.34;

// *************************菜鸟教程中 TypeScripts接口 ************************//
interface Person {
age:number
}

interface Musician extends Person {
instrument:string
}

var drummer = {}; // 表示强制类型转换 跟new class() 实例化类的效果一样
drummer.age = 27
drummer.instrument = “Drums”
console.log("年龄: "+drummer.age)
console.log("喜欢的乐器: "+drummer.instrument)
接口的

// ***********接口和数组 **************//
接口中我们可以将数组的索引值和元素设置为不同类型,索引值可以是数字或字符串。

TypeScript
interface namelist {
[index:number]:string
}

var list2:namelist = [“John”,1,“Bran”] // 错误元素 1 不是 string 类型
interface ages {
[index:string]:number
}

var agelist:ages; //接口 只有在接口中是未定义类型 才可以先声明,不赋值 。其他时候都需要直接赋值才能使用
agelist[“John”] = 15 // 正确
agelist[2] = “nine” // 错误

// ************************ 封装 ************************//
封装: 将 (数据) 与 (操作数据的方法) 封装成为一个模板,“类” 的过程,就是封装,

// ************************ 继承 ************************//
***继承:***继承与抽象(先抽象再继承) ~~依据另一个类来定义一个类并实现被继承的父类中的方法~根据父类的方法来定义子类中的方法

// ************************ 多态 ************************//
多态: 接口中方法的多种不同的实现方式即为多态 根据调用函数的对象的类型来执行不同的函数。 父类或接口定义的引用变量 可以指向 子类或具体实现类的实例对象。提高了程序的拓展性

面向过程

把(计算机程序)视为一系列的命令集合,程序的基本单元,即一组函数的顺序执行,

抽象函数:用abstract关键字声明的,只有函数的定义,没有函数体的函数被称为抽象函数。

虚函数:用virtual声明类的成员函数,使之成为虚函数,不能将类外的普通函数声明为虚函数。因为虚函数的作用是允许在派生类中对基类的虚函数重新定义。所以虚函数只能用于类的继承层次结构中。

 一个成员函数被声明为虚函数后,在同一类族中的类就不能再定义一个非virtual的但与该虚函数具有相同的参数(包括个数和类型)和函数返回值类型的同名函数。
   根据什么考虑是否把一个成员函数声明为虚函数?
   ①  看成员函数所在的类是否会作为基类
   ② 看成员函数在类的继承后有无可能被更

对函数的概念 顺口溜 写 藏 载 同 (血,尝,债,同)

在同一个作用域内,可以声明几个功能类似的同名函数


//************************************ 大前提:子类的方法继承父类的方法 ,有的继承自抽象类有的继承自普通类********************************************//
//************************************ 重写又叫(覆盖) ********************************//
函数名相同,函数的参数类型,参数的个数和返回值完全相同的话 (如果被继承的
父类函数是虚函数
就是–重写)
概括就是 子函数与父函数完全一样,而夫函数是虚函数-就是重写(覆盖)
就是把另一个函数重写了一遍

//************************************ 隐藏 ********************************//
函数名相同,函数的参数类型,参数的个数和返回值完全相同的话 (如果被继承的
父类函数“不是”虚函数
就是–隐藏)

//************************************ 重载 ************************************//
函数名相同参数类型 或 参数的个数 不同 返回值可以相同也可以不相同,但是 的话,就是–重载
(如果在同一个类中,函数名相同,其中一个函数有const常量修饰符的话 也叫–重载)
const:常量就是使被修饰的变量的返回值为常量,例如 return 1;return 2;

//************************************ 相同 ************************************//
仅仅返回值不同的话 函数名 参数类型 参数的个数完全相同, ,就是–相同

总结: 完全相同:就是重写或隐藏, (人家都说 重写一遍(完全一样)并没有什么用)
仅返回值不同:就是相同
仅参数不同(不考虑返回值) 重载 {参数包括类型和个数}

/********************** 堆和栈的区别 ************************//

c#语言中的堆和栈的区别


1、栈区(stack)— 由编译器自动分配释放,是一段连续的存储空间 ,存放函数的参数,局部变量的"值"等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放,不是一段连续的存储空。一般存放"引用类型",间, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表


值类型和引用类型的区别


值类型:(基本数据类型(如:int,float,bool等) , (结构体,枚举,空类型)
存放在

引用类型: 自定义的 (类,接口,委托),( 数组,字符串,Object)
存放到
堆**上

//********************* 架构模式【开发框架】 *********************

//********************* MVC ********************* 模式(数据存储)----> 试图(数据获取或显示) -------> 控制器(数据)
面向对象;
MVC;
消息队列驱动;
直到现在各个UI系统,包括题主所提到的MFC、WPF、Qt
实现快速开发的程序框架(WTL),
还是可以实现跨平台的程序框架(Qt)?
是需要能实现常见功能的中小程序框架(wxWidgets),还是得安装几个G的包但可以实现复杂应用的程序框架(WPF)?不同的团队面对不同的任务,一定会有不同的选择。
在这里插入图片描述
在这里插入图片描述

//********************* MVP ********************* MVP是,
是mvc模式的一种变种 model(数据模型,数据存储的地方) -----> view(试图) ----------> presenter(中间人)模式 presenter是中间人,中介的意思
MVP
在这里插入图片描述
上面讲的是MVP的Passive View模式,该模式下View非常Passive,它几乎什么都不知道,Presenter让它干什么它就干什么。而Supervising Controller模式中,Presenter会把一部分简单的同步逻辑交给View自己去做,Presenter只负责比较复杂的、高层次的UI操作,所以可以把它看成一个Supervising Controller。

//********************* MVVM ********************* MVVM
MVVM
MVVM可以看作是一种特殊的MVP(Passive View)模式,或者说是对MVP模式的一种改良
在这里插入图片描述
MVVM把View和Model的同步逻辑自动化了。以前Presenter负责的View和Model同步不再手动地进行操作,而是交由框架所提供的Binder进行负责。只需要告诉Binder,View显示的数据对应的是Model哪一部分即可。

优点:
1、提高可维护性。解决了MVP大量的手动View和Model同步的问题,提供双向绑定机制。提高了代码的可维护性。
2、简化测试。因为同步逻辑是交由Binder做的,View跟着Model同时变更,所以只需要保证Model的正确性,View就正确。
大大减少了 对View同步更新的测试。
缺点:
1、过于简单的图形界面不适用,或说牛刀杀鸡。
2、对于大型的图形应用程序,视图状态较多,ViewModel的构建和维护的成本都会比较高。
3、数据绑定的声明是指令式地写在View的模版当中的,这些内容是没办法去打断点debug的。

//********************* MFC ********************* MFC库是开发Windows应用程序的C++接口

//********************* Qt ********************* Memento pattern备忘录模式 ,可以回滚到某个之前的状态

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值