机器语言就是一些机器能读懂的二进制指令集合
汇编语言将机器指令映射为一些可以被人读懂的助记符,如ADD、SUB等。高级语言
高级语言屏蔽了机器的细节,提高了语言的抽象层次,程序中可以采用具有一定含义的数据命名和容易理解的执行语句。这使得在书写程序时可以联系到程序所描述的具体事物。
传统的程序设计方法可以归结为“程序=算法+数据结构”,将程序定义为处理数据的一系列过程。这种设计方法的着眼点是面向过程的,特点是数据与程序分离,即数据与数据处理分离。
结构化程序设计的基本思想是采用自顶向下、逐步细化的设计方法和单入单出的控制结构。其理念是将大型程序分解成小型、便于管理的任务。如果其中的一项任务仍然过大,则将它分解为更小的任务。这一过程将一直持续下去,直到将程序划分为小型的,易于编写的模块。
很多数据仍然属于整个程序,因而结构化程序设计思想还是需要有很多的全局变量,在某个地方进行更改,所以会对整个程序产生难以预料的影响
比如在家就餐:
准备菜 买菜、洗菜、切菜、烧菜、上桌就餐
考虑问题的时候以算法为重心,而不是以数据为重心,要求一个软件负责人,他了解整个系统的任务分解,当问题复杂度超过了个人能够理清各个子系统之间的调用关系时,这种自顶向下的方法可能失效,因而容易出现软件危机
结构化程序设计为处理复杂问题提供了有力手段,但到80年代末,这种设计方法逐渐暴露出以下缺陷:
程序难以管理
数据修改存在问题
程序可重用性差
用户要求难以在系统分析阶段准确定义,致使系统在交付使用时产生许多问题。
用系统开发每个阶段的成果来进行控制,不能适应事物变化的要求。
面向过程程序设计缺点的根源在于数据与数据处理分离
程序 = 对象 + 对象 +对象
面向对象将系统看成通过交互作用来完成特定功能的对象的集合。每个对象用自己的方法来管理数据。也就是说只有对象内部的代码能够操作对象内部的数据。
对象 = 算法 + 数据
面向对象三个特征:
封装、继承、多态
面向对象(Object Oriented )是认识事务的一种方法,是一种以对象为中心的思维方式
面向对象的程序设计:
对象=(算法+数据结构)
程序=对象+对象+……+对象
面向对象程序设计模拟自然界认识和处理事物的方法,将数据和对数据的操作方法放在一起,形成一个相对独立的整体——对象(object),同类对象还可抽象出共性,形成类(class )。一个类中的数据通常只能通过本类提供的方法进行处理,这些方法成为该类与外部的接口。对象之间通过消息(message)进行通讯。
比较:
与结构化设计抽象的层次不同
(以操作为重心)结构化设计方法应用的是过程抽象。所谓过程抽象是将问题域中具有明确功能定义的操作抽取出来,并将其作为一个实体看待。
(以数据为重心)数据抽象是较过程抽象更高级别的抽象方式,将描述客体的属性和行为绑定在一起,实现统一的抽象,从而达到对现实世界客体的真正模拟。
从计算机的观点看对象
对象是计算机内存中的一块区域。通过内存分块每个对象在功能上相对保持独立。
这些内存不但存储数据,也存储代码。这保证对象是受保护的,只有对象中的代码能访问存储于对象中的数据。这清楚地限定了对象所具有的功能,并且使得对象不受未知外部事件的影响,从而使自己的数据和功能不会因此遭受破坏。
对象之间只能通过函数调用也就是发送消息来实现相互通信。
当对象的一个函数被调用时,对象执行内部的代码来响应该调用,从而使对象呈现一定的行为。这个行为及其呈现出来的结果就是该对象所具有的功能。
面向对象的基本特征:
抽象、封装、继承、多态
抽象是人们认识事物的一种方法
抓住事物本质,而不是内部具体细节或具体实现
注:抽象是从具体到一般的过程
房屋:钉子+木材+钢筋+水泥
城镇 = 房屋+建筑物
对象->类 (归类) 从特殊到一般
大类->小类 (分类) 从一般到特殊
封装是指按照信息屏蔽的原则,把对象的属性和操作结合在一起,构成一个独立的对象。
通过限制对属性和操作的访问权限,可以将属性“隐藏”在对象内部,对外提供一定的接口,在对象之外只能通过接口对对象进行操作。
封装性增加了对象的独立性,从而保证了数据的可靠性。
外部对象不能直接操作对象的属性,只能使用对象提供的服务。
继承
拿来主义:
继承表达了对象的一般与特殊的关系。特殊类的对象具有一般类的全部属性和服务。
当定义了一个类后,又需定义一个新类,这个新类与原来的类相比,只是增加或修改了部分属性和操作,这时可以用原来的类派生出新类,新类中只需描述自己所特有的属性和操作。
继承性大大简化了对问题的描述,大大提高了程序的可重用性,从而提高了程序设计、修改、扩充的效率。
多态性:同一个消息被不同对象接收时,产生不同结果,即实现同一接口,不同方法。
一般类中定义的属性和服务,在特殊类中不改变其名字,但通过各自不同的实现后,可以具有不同的数据类型或具有不同的行为。
多态使得我们能够以一致的观点来看待不同的(但又大相径庭的)对象
同一个消息发送到不同的对象,就会呈现出不同的行为。
继承和多态性组合,可以生成很多相似但又独一无二的对象。继承性使得这些对象可以共享许多相似特性,而多态又使同一个操作对不同对象产生不同表现形式。这样不仅提高了程序设计的灵活性,而且减轻了分别设计的负担。
面向对象方法的特性:
程序设计的重点在数据而不是函数
程序由对象组成,建立对象的目的不是为了完成一个步骤,而是为了描叙某个事物在整个解决问题的步骤中的行为。
对象之间通过相互协作来完成功能
函数与相关的数据紧密结合
数据可以被隐藏
很容易扩充新的数据和函数
面向对象开闭原则:
对增加开放,对修改、删除关闭
使用该对象的原有的系统就不会发生改变
面向对象的优缺点:
面向对象编程的优点:
易维护:可读性高,即使改变需求,由于继承的存在,维护也只是在局部模块,维护起来是非常方便和较低成本的。
质量高:可重用现有的,在以前的项目的领域中已被测试过的类使系统满足业务需求并具有较高的质量。
效率高:在软件开发时,根据设计的需要对现实世界的事物进行抽象,产生类。这样的方法解决问题,接近于日常生活和自然的思考方式,势必提高软件开发的效率和质量。
易扩展:由于继承、封装、多态的特性,自然设计出高内聚、低耦合的系统结构,使得系统更灵活、更容易扩展,而且成本较低。
面向对象编程的缺点:
运行效率会下降10%左右