抽象模型
//编程不仅是一门技术,更是一门艺术
//实例化的工厂,实例出合适的对象,多态的应用
//----------对象的返回--
//同一类的属性,方法可以随便调用
//不能只满足于写完代码运行结果正确就完事,时常
//考虑如何让代码更加简炼,更加容易维护,容易扩展和复用,只有这样才可以是真的提高。写出优雅的代码真的是一种很爽的事情
//抽象模型
// 抽象模型之间的关系
// 界面逻辑
//--------------------------
// Operation oper;
// oper = OperationFactory.createOperate("+");
//方法的调用-----有返回值----返回对象使用方法
// oper.NumberA = 1;
// oper.NumberB = 2;
// double result = oper.GetResult();
//面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类
//需求的变更是必然!所以开发者应该的是考虑如何让自己的程序更能适应变化
//面对算法的时常变动,应该有更好的办法。
// “你问我?你说呢?”大鸟笑道,“商场收银时如何促销,用打折还是返利,其实都是一些算法,用工厂来生成
//算法对象,感觉是不是很怪?而最重要的是这些算法是随时都可能互相替换的,这就是变化点,而封装变化点是我们
//面向对象的一种很重要的思维方式。”
// 环境(Context)角色:持有一个 Strategy类的引用。
//抽象策略(Strategy)角色:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的
//接口。
//具体策略(ConcreteStrategy)角色:包装了相关的算法或行为
//我们可以在实例化的时候,再给计算机一个类的名称字符串,来让计算机知道应该实例化哪一个类。”
// 所以我们要考虑的就是可不可以不在程序里写明‘如果是打折就去实例化 CashRebate 类,如
//果是返利就去实例化 CashReturn 类’这样的语句,而是在当用户做了下拉选择后,再根据用户的选择去某个地方找应
//该要实例化的类是哪一个。这样,我们的 switch 就可以对它说再见了。
//编程方式----反射
// 我们还可以用反射的办法得到这个实例
//7using System.Reflection;//先引用 System.Reflection
//8//假设当前程序集是 AnimalSystem,名称空间也是 AnimalSystem
//9Animal animal = (Animal)Assembly.Load("AnimalSystem").CreateInstance("AnimalSystem.Cat");
//其中关键是
//Assembly.Load("程序集名称").CreateInstance("名称空间.类名称")
//那也就是说,我们可以在实例化的时候,再给计算机一个类的名称字符串,来让计算机知道应该实例化哪一个类
//单一职责原则:,就是指就一个类而言,应该仅有一个引起它变化的原因,就刚才修电脑的事,显然内存坏了,不应该成为更换 CPU 的理由
//开放—封闭原则:是说对扩展开发,对修改关闭,通俗的讲,就是我们在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展
//依赖倒转原则:原话解释是抽象不应该依赖细节,细节应该依赖于抽象,就是要针对接口编程,不要对实现编程
//界面层UI:用来界面显示和处理的,对的,它们可以看作是一层
// 业务逻辑层(Business Logic Layer):根据业务规则来开发软件提供服务的-------------zhongjian
//数据访问层(Data Access Layer)或简称 DAL:访问配置文件或处理数据库就是数据层
// ‘迪米特法则(LoD)’ 也叫最少知识原则,
//简单的说,就是如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用。如果其中一个类需要调
//用另一个类的某一个方法的话,可以通过第三者转发这个调用。
// 门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行。门面模式提供一个高层次
//的接口,使得子系统更易于使用
//生活中去体会面向对象
//1.实例化对象-------简单工厂
// 2.策略模式------解决基本的变化问题(代码不断增加的问题,算法是随时都可能互相替换的,这就是变化点,而封装变化点是我们面向对象的一种很重要的思维方式。”策略模式只适用于客户端知道所有的算法或行为的情况-----界面模式:职责太重)
// 3.反射-------解决计算机知道应该实例化哪一个类(在当用户做了下拉选择后,再根据用户的选择去某个地方找应该要实例化的类是哪一个)
// -----------通过基本变量可以解决变化更改问题-----------解决了界面负担太重问题--------XML配置文件-----维护与扩展
// 4.不变的基本代码------应用三层架构基本的东西区分开来
//5.迪米特法则(LoD)层次之间的沟通
// 6.门面模式提供接口--------代表
//--------------------------------------------目的:提高应变性
1.基本原则:
-------可维护、可复用、可扩展、灵活性好
-------代码要规范
-------从计算机的角度去理解
--属性是类了解的事情而方法是类完成的事情;
--系统应由对象来创建对象拥有数据和功能属性定义数据而方法定义功能;
--抽象的过程就是定义类了解和要完成的事情的过程(数学模型);
--对一个事物进行怎样的抽象将依据你要设计的程序而定
--封装解决如何为系统功能建模的问题,在面向对象的世界中,俺们要把系统建模成类,类也要建模为属性和方法,设计类将如何完成这些事情的过程就被称为封装
----继承:
----在面向对象语言中,接口的多种不同的实现方式即为多态
----多态性使得能够利用同一类(基类)类型的指针来引用不同类的对象,以及根据所引用对象的不同,以不同的方式执行相同的操作
一个是以对象为基本单元,用对像的使用来完成程序功能
而面向结构化则只是写你操作赛车是要进行的动作
所以说结构化就是细化为几个部分,分别完成后,在进行组装
面向对像则是将整个内容分析清楚,封装成一个完整的东西后,你在进行内部细化
面向过程的思维方式是分析综合。面向对象的思维方式是构造。
面向对象也可以说是从宏观方面思考问题,而面向过程可以说是从细节处思考问题。在面向对象中,也存在面向过程。
从微观角度说,对象有着坚硬的外壳,从外部看来,除了它用来与外界交互的消息通道之外,对象内部就是一个黑匣子,什么也看不到,这称为封装;对象可以结合在一起形成新的对象,结合后的对象具有前两者特性的总和,这称为聚合;对象可以繁育,产下的孩子将拥有父辈全部的本领,这称为继承;对象都是多面派,它会根据不同的要求展现其中的一个面,这就是接口;多个对象可能长着相同的脸,而这张脸背后却有着不同的行为,这就是多态……
实现继承是指使用基类的属性和方法而无需额外编码的能力;
接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;
可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。
--------------------------------------
面向对象程序设计语言
面向对象技术并不是某个特定语言的特权。如同结构化程序设计一样,OOP概念可以在很多语言比如C和Pascal中实现。但是,当程序越来越大时,程序设计工作会变得拙劣而混乱。而一个支持OOP概念的程序设计语言则可以让一切变得简单。
一个语言必须支持几个主要的OOP概念才能称其是面向对象的。根据所支持的OOP特性,语言可以分为以下两类:
1、基于对象的程序设计语言;
2、面向对象的程序设计语言。
基于对象的程序设计语言仅支持封装和对象辨识。
一个面向对象的程序设计语言所要支持的重要特性如下:
·数据封装
·数据隐藏和访问机制
·对象的自动初始化和清除
·操作符重载
支持对象风格程序设计的语言称为基于对象的程序设计语言。它们不支持继承和动态绑定。
Ada就是一个典型的基于对象的程序设计语言。
面向对象的程序设计不仅仅包含基于对象程序设计的特性,还支持继承和动态绑定。
OOP的应用
OOP最有前途的应用领域如下:
1、实时系统;
2、仿真和建模;
3、面相对象数据库;
4、超文本、超媒体和扩展文本;
5、AI和专家系统;
6、神经网络和并行程序设计;
7、决策支持和办公自动化系统;
8、CIM/CAM/CAD系统。
面向对象是在面向过程基础上.也就是说面向对象编程实际上是把过程命令放在指定的对象中,对象所完成的动作是由过程命令来决定的.