抽象模型

//编程不仅是一门技术,更是一门艺术
//实例化的工厂,实例出合适的对象,多态的应用
//----------对象的返回--
//同一类的属性,方法可以随便调用
//不能只满足于写完代码运行结果正确就完事,时常
//考虑如何让代码更加简炼,更加容易维护,容易扩展和复用,只有这样才可以是真的提高。写出优雅的代码真的是一种很爽的事情
//抽象模型
// 抽象模型之间的关系
// 界面逻辑
//--------------------------
// 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系统。
面向对象是在面向过程基础上.也就是说面向对象编程实际上是把过程命令放在指定的对象中,对象所完成的动作是由过程命令来决定的.

时间: 2024-08-24 10:21:21

抽象模型的相关文章

Qt MVC设计模式:子类化抽象模型的方法

模型子类化参考 模型的子类需要提供很多在QAbstractItemModel中定义的虚函数的实现.需要实现的方法的数量取决于你想创建的子类的风格--它提供一个简单的列表视图,还是一个表格视图,或者是一个复杂的层次视图.从QAbstractListModel和QAbstractTableModel继承的子类可以直接利用这两个类的许多默认的虚函数. 子类中需要实现的方法可以分为三种: 1. 处理项数据:所有的模型需要实现方法来保证视图和委托能够查询模型的尺寸.检测每个项以及返回其中的数据. 2. 浏

【并发编程】JMM:java内存模型抽象

本文试图向大家解释清楚JMM及其抽象模型,但不仅仅是一个介绍,更希望能讲清楚JMM内存模型抽象的原因. 一.JMM的概念: 二.JMM的抽象将内存内存模型分成线程私有的本地内存和所有线程共享的主存: 三.JMM抽象模型造成了并发编程中共享变量的内存可见性问题,为什么会造成?选择这样的抽象模型有什么好处?有什么样的方法来处理这个问题? 一.JMM JMM直译过来就是java内存模型(java memory model),他的更深层次的描述,"JMM是一个语言级的内存模型,通过屏蔽各个系统平台的差异

(转)JAVA内存模型

(原本准备把内存模型单独放到某一篇文章的某个章节里面讲解,后来查阅了国外很多文档才发现其实JVM内存模型的内容还蛮多的,所以直接作为一个章节的基础知识来讲解,可能该章节概念的东西比较多.一个开发Java的开发者,一旦了解了JVM内存模型就能够更加深入地了解该语言的语言特性,可能这个章节更多的是概念,没有太多代码实例,所以希望读者谅解,有什么笔误来Email告知:[email protected],本文尽量涵盖所有Java语言可以碰到的和内存相关的内容,同样也会提到一些和内存相关的计算机语言的一些

[转] ASP.NET MVC 模型绑定的功能和问题

摘要:本文将与你深入探究 ASP.NET MVC 模型绑定子系统的核心部分,展示模型绑定框架的每一层并提供扩展模型绑定逻辑以满足应用程序需求的各种方法. 同时,你还会看到一些经常被忽视的模型绑定技术,并了解如何避免一些最常见的模型绑定错误. ASP.NET MVC 模型绑定通过引入自动填充控制器操作参数的抽象层.处理通常与使用 ASP.NET 请求数据有关的普通属性映射和类型转换代码来简化控制器操作. 虽然模型绑定看起来很简单,但实际上是一个相对较复杂的框架,由许多共同创建和填充控制器操作所需对

java内存模型及分块

转自:http://www.cnblogs.com/BangQ/p/4045954.html 1.JMM简介 2.堆和栈 3.本机内存 4.防止内存泄漏 1.JMM简介 i.内存模型概述 Java平台自动集成了线程以及多处理器技术,这种集成程度比Java以前诞生的计算机语言要厉害很多,该语言针对多种异构平台的平台独立性而使用的多线程技术支持也是具有开拓性的一面,有时候在开发Java同步和线程安全要求很严格的程序时,往往容易混淆的一个概念就是内存模型.究竟什么是内存模型?内存模型描述了程序中各个变

Django 模型 - 模型的定义

Django也遵循了MVC的分层原则,不过在做法上略有不同.    首先模型部分保持不变:Django的模型增只负责把数据传入传出数据库.然而Django里的视图却并不是显示数据的最后一步----Django的视图其实更接近MVC里传统意义上的控制器.他们是用来将模型层和表示层(有HTML和Django的模板语言组成)链接在一起的python函数.按Django开发团队的话老说就是: 我们理解的MVC里,视图的作用是描述将要显示给用户的数据.这不仅仅是数据看上去的外观,含包括如何表示数据.视图描

消息总线之模型重构

前段时间重新对消息总线的通信模型进行设计&重构,这篇文章谈谈其中的一些想法. RabbitMQ简介 消息总线对RabbitMQ的官方java client进行了定制.简化.这里首先谈谈RabbitMQ作为一个Message Broker的两个核心概念: Exchange Exchange(交换器),其实你可以简单得将它看成是Router(路由器),路由就是它的主要职责.它支持非常灵活的 Exchange-Exchange.Exchange-Queue 之间的绑定,并提供了4种Exchange类型

基本的并发编程模型

基于进程的并发 基本模型 在TCP服务器编程中,多进程并发服务器通常由主进程负责连接的建立,然后fork出子进程,负责该连接剩下的行为,直到关闭. 关于多进程并发服务器有几点重要的内容: 通常服务器会运行很长时间,因此必须要包括一个SIGCHLD处理程序,来回收僵死子进程的资源.因为当SIGCHLD处理程序执行时,SIGCHLD信号是阻塞的,而Unix信号是不排队的,所以SIGCHLD处理程序必须准备好回收多个僵死子进程的资源. 父进程在fork调用后,将连接交给子进程处理,父子进程必须关闭他们

消除if-else/switch语句块来聚合模型的设计与实现

写在最前头的话:请不要理解为不再需要if-else/switch.写在最前头的结论:使用Enum. 1, 前言 if/switch这样的分支语句在实际开发中的使用自然是不可避免,但是我们必须承认使用这种分支判断语句实现的代码不仅可读性差(转来转去的绕晕),而且维护代价极高.导致维护代价上升,个人认为地并不是说是由于在开发软件时,开发人员基础不够好或者问题考虑不周全导致的各种漏洞和缺陷,主要原因是没有很好的遵循我们听烂了的软件开发基本原则-高内聚低耦合.在业务系统的开发过程中,大多业务需求都不可能