针对抽象编程
课本上有个例子的。你按照他的流程走一遍你就懂了。有的算法过程并不复杂,只是判断条件变得复杂了一些。
算法分析中的每一个步骤,都可以对应地转换成C语言程序中的某一行或者几行代码,我们编写C语言程序代码的过程,实际上就是用C语言这种编程语言来表达算法步骤的过程。我们就像一位翻译官一样,将计算机看不懂的,用自然语言表达的算法步骤,翻译为计算机看得懂的,用编程语言(例如,C语言,也可以是其他编程语言)表达的,并可以被编译执行的源程序代码。
B. 为什么面向对象技术强调针对抽象编程而不是具体编程
当你已经有一段程序之后,想要在其基础上做一点功能上的修改来获得新的代码,这时就可以继承之前的基类,然后自己进行一些补充生成新的派生类,可以更为方便的继承已有的程序。简单地说面向对象的编程的特点就是封装、继承与多态
C. 在面对对象编程中抽象类的特点什么
抽象类的特点:
1、抽象类的方法可以是抽象的,也可以是不抽象的。
2、抽象类的方法可以全是抽象的,也可以全是不抽象的。
3、有抽象方法的类必须是抽象类,或者是接口(但是接口的方法定义必须是public static abstract 修饰)。
4、子类继承抽象类,必须实现抽象类的所有抽象方法。
5、抽象类不能被实例化,没有构造函数。
6、子类中的抽象方法不能与父类的抽象方法同名。
7、抽象类的默认属性修饰符是public abstract。
8、抽象类的属性不能定义成静态的。
9、如果抽象类的抽象方法不被重写,那么子类也必须是抽象类。
D. 抽象编程的编程质量
(Programming Quality ) 通过使用更好的编程方法可以从本质上改进可读性通过使用定义良好的算法和语句控制结构,可以局部改进算法的可理解性通过学习和使用优秀程序员的编码习惯,采用一贯的编码风格,可以增强可读性。
注意:
高级程序员与初学者对可读性的把握分寸是不同的易编程性:
只是对采用好的编程方法或更高级语言而言,抽象程度越大,越易编程对象化编程在抽象数据类型的创建上做了大量的工作,因而赢得了应用程序编写的方便与快捷比如数组,无法整体复制,无法扩容,但是向量则可以。 编程在算法设计上是挖空心思的劳动过程,而在运用语言对之描述上应该潇洒自在:容易表达,不容易出错,运行上更安全。
好的编程方法能够帮助程序员实现潇洒编程抽象数据类型中可以将大量安全代码嵌入其中,从而使应用编程潇洒自在实现抽象数据类型的过程本身也是使用其他抽象数据类型的应用编程,同样也充满着潇洒与自在
void f(char* s)
{
string s1,s2=s; //第一种
s1=s;
char* st=new char[strlen(s)+1]; //第二种
strcpy(st,s); char a[40]; //第三种
strncpy(a,s,sizeof(a));
a[sizeof(a)-1]=‘ ’;
} 指局部修改不影响系统全局的总体性能,而系统产生的问题通常可以通过局部维护(修改或更换部件) 来解决。
模块化编程使程序可拆装,可局部修改,而不影响整体性能与工作,因而可维护性强,过程化编程是将过程模块化,具有一定的可维护性;
对象化编程是将数据类型也模块化,从而导致更方便的维护性能可扩充性:指系统扩展时,只增加扩展代码,而对原系统的正常运作只作很少的修改甚至不修改功能扩展的影响:
过程化编程,会涉及多处扩展代码与原系统不和谐所带来的修改对象化编程,如果是抽象数据类型的功能扩展,则不会影响原系统的正常运行,而只是支持应用程序中增加的一些扩展代码而已;
如果是应用程序功能扩展,那是使用抽象数据类型的抽象代码扩展,其修改量比之低级代码要少效率

E. 请问C++语言的抽象编程问题
行为抽象,比如长方形,其必有的行为就是绘制,那么绘制这个行为可以抽象成一个函数就是绘制函数(内容就是如何绘制一个长方形)。而数据抽象,长方形基本要素就是长宽,那么这个两个值就可以抽象成长方形的两个基本数据,长和宽。
至于数据结构,上网找吧,真的很多解释的。最基本的数组就是一种数据结构。
F. 面向切面编程 面向接口编程 面向抽象编程 面向对象编程
面向切面的编程 主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
比如我们最常见的就是日志记录了,举个例子,我们现在提供一个服务查询学生信息的,但是我们希望记录有谁进行了这个查询。如果按照传统的OOP的实现的话,那我们实现了一个查询学生信息的服务接口(StudentInfoService)和其实现类(StudentInfoServiceImpl.java),同时为了要进行记录的话,那我们在实现类(StudentInfoServiceImpl.java)中要添加其实现记录的过程。这样的话,假如我们要实现的服务有多个呢?那就要在每个实现的类都添加这些记录过程。这样做的话就会有点繁琐,而且每个实现类都与记录服务日志的行为紧耦合,违反了面向对象的规则。
那么怎样才能把记录服务的行为与业务处理过程中分离出来呢?看起来好像就是查询学生的服务自己在进行,但是背后日志记录对这些行为进行记录,但是查询学生的服务不知道存在这些记录过程,这就是我们要讨论AOP的目的所在。AOP的编程,好像就是把我们在某个方面的功能提出来与一批对象进行隔离,这样与一批对象之间降低了耦合性,可以就某个功能进行编程。
G. 什么是 “面对对像的程序设计”
这个一句话解释不了,如果你没有去深入它一下也理解不了。但是经过学习,你就会不断增加对它的理解。C++就是典型的面向对象的语言。
面向对象是继结构化革命之后的又一次软件开发方式革命。面向对象的主要思想是基于抽象数据类型的(Abstract Data Type, ADT):在结构化编程过程中,人们发现把某种数据结构和用于操纵它的各种操作以某种模块化方式绑定到一起会非常方便,使用这种方式进行编程时数据结构的接口是固定的。
如果对抽象数据类型进一步抽象,就会发现把这种数据类型的实例当作一个具体的东西、事物、对象,就可以引发人们对编程过程中怎样看待所处理的问题的一次大的改变。抽象数据类型方法虽然也有一定的抽象能力,但其核心仍然是数据结构和算法。而面向对象方法直接把所有事物都当作独立的对象,处理问题过程中所思考的不再主要是怎样用数据结构来描述问题,而是直接考虑重现问题中各个对象之间的关系。可以说,面向对象革命的最重要价值就在于改变了人们看待和处理问题的方式。
面向对象方法中,对象可以接受其他对象传来的消息,也可以向其他对象发送消息。有的语言静态类型,决定了对象可接受的消息的范围,这称为对象的类型的接口。有的语言中对象可以接受任何消息,但只对其有意义的消息进行反应。对象中可以包含其他对象,这成为“聚合”,对象可以被当作其他类型的对象,这要求对象的类型“继承”另外的类型。对象只能通过其所提供的接口来进行访问,其内部具体实现是不可访问的,这成为“封装”。面向对象方法的三个核心要素是:封装、继承、多态。
H. 抽象类就是指用来被继承的类吗
1. 什么是抽象类抽象类仅提供一个类型的部分实现。抽象类可以有实例变量,以及一个或多个构造函数。抽象类可以同时有抽象方法和具体方法。一个抽象类不会有实例,这些构造函数不能被客户端调用来创建实例。一个抽象类的构造函数可以被其子类调用,从而使一个抽象类的所有子类都可以有一些共同的实现,而不同的子类可以在此基础上有其自己的实现。
2. 抽象类的用途
1) 具体类不是用来继承的。 Scott Meyers曾指出,只要有可能,不要丛具体类继承。
2) 假设有2个具体类,类A和类B,类B是类A 的子类,那么一个最简单的修改方案是应当建立一个抽象类(或java接口)C,然后让类A和类B成为抽象类C的子类。
3) 抽象类应当拥有尽可能多的共同代码。以提高代码的复用率。
4) 抽象类应当拥有尽可能少的数据。
3. 基于抽象类的模式和原则
1) 针对抽象编程,不要针对具体编程。
2) 尽量使用合成(Composition),而不要使用继承来达到复用的目的。
3) 使用摸板方法模式
4. 什么时候应当使用继承复用
1) 子类是超类的一个特殊种类,而不是超类的一个角色,也就是要区分”is – a” 和“has-a”两种关系。
2) 永远不会出现需要将子类换成另一个子类的情况。如果设计师不是很肯定一个类回不会在将来变成另一个类的子类的话,就不应当把这个类设计成这个超类的子类。
3) 子类具有扩展超类的责任,而不是具有置换掉(Override)或注销掉(Nullify)超类的责任。
4) 只有在分类学上有意义时,才可以使用继承,不要丛工具类继承。
I. 抽象编程的介绍
抽象编程是通过抽象的方法来减少编程工作量或有效地减轻编程难度称为抽象编程将问题通过功能分解,各个击破的编程方法(过程化编程) 是一种以行为抽象为主的抽象编程将问题通过实体分析,分层分类地实现抽象数据类型,从而进行简单应用编程(基于对象编程)是一种以数据抽象为主的抽象编程这种抽象编程,通过数据类型复用,方便编程,方便维护和扩展,其效果比过程化编程更好编程语言中没有许多具体的数据类型要解决实际问题,很大部分工作是要建立数据模式与实际问题的对应,也就是建立抽象数据类型的过程对象化编程就是基于分层分类的抽象数据类型之具体编程,它能更好地实现数据结构和算法,便是将N.Wirth的程序公式:程序=算法+数据结构具体化为:程序=算法+抽象数据类型

J. 什么是抽象编程
顾名思义抽象编程是指在编程的过程中把大象抽出来。
如何在编程的过程中把大象抽出并保持程序的可移植性,这个一直以来是一个困扰全世界各类语言编程的程序员的一个难题。
最早提出抽象这个概念的是
达芬奇
在他的名画中有着抽象的充分演示。
如果在一个项目中做到抽象编程的话,无疑是完美的。那么在编译型的语言中如果做到呢?
首先搭建环境,这个问题怎么说呢?真是个见仁见智的。
在C语言中和在JAVA又或者在Python中如何搭建这个抽象的环境。
由于笔者最近热衷于Python的开发。首先谈谈在Python中如何做到把大象抽出来的同时保证程序的完美的可移植性。
第一
建立一个抽象类库。
打开IDLE,引入抽象的概念。
第二
告诉大象我们即将把你抽出来。这个对于大象来说是很不公平的,它肯定的回答NO
那么我们是不是就不能把大象抽出来了呢?当然可以。大象是很笨的,我们可以先构造一个函数。内容包括香蕉芒果等大象爱吃的食物,先把大象“骗”出来。当然这个也是很有技巧的。骗出来以后大象暂时存在什么地方呢?众所周知Python讲究效率、快捷的开发注重的是解决问题。那么,我们到哪里去找个那么大的空间把大象存进去呢?答案当然是动物园啦。首先与管理员协调暂存事宜。待需要的时候在把大象引入回来。
第三
大象的引入问题
这个时候相信大家对把大象存在什么位置已经有了个初步的了解,但是如果管理员很热爱大象的话,给大象提供的伙食比我们先前的要好。那么这个时候引入无疑会增加成本。必须提供更好的伙食条件大象才有可能原因再次回来我们预先的架构中继续工作。那么在作者的BLOG中有着一套比较完整的解决方案。下面的参考地址会给出作者的Blog地址。请大家争相传阅。
总结:抽象编程的原理大家都清楚了。需要解决的主要问题就是把大象抽出后的再次引用问题。这个也是本文的难点。希望对大家有所帮助。
