第二章 面向对象概述
- 格式:doc
- 大小:709.58 KB
- 文档页数:16
⾯向对象知识点总结1、⾯向对象三⼤特征封装:封装就是隐藏对象的属性和实现细节,仅对外公开接⼝,控制在程序中属性的读和修改的访问级别,将抽象得到的数据和⾏为(或功能)相结合,形成⼀个有机的整体。
继承:继承就是⼦类继承⽗类的特征和⾏为,使得⼦类对象(实例)具有⽗类的实例域和⽅法,或⼦类从⽗类继承⽅法,使得⼦类具有⽗类相同的⾏为。
多态:多态指同⼀个⾏为具有多个不同表现形式或形态的能⼒,是指⼀个类实例(对象)的相同⽅法在不同情形有不同表现形式,使具有不同内部结构的对象可以共享相同的外部接⼝。
2、类与对象对象:对象是类的⼀个实例,有状态和⾏为。
类:类是⼀个模板,它描述⼀类对象的⾏为和状态。
⼀个类可以包含以下类型变量:(1)局部变量:在⽅法、构造⽅法或者语句块中定义的变量被称为局部变量。
变量声明和初始化都是在⽅法中,⽅法结束后,变量就会⾃动销毁。
(2)成员变量:成员变量是定义在类中,⽅法体之外的变量。
这种变量在创建对象的时候实例化。
成员变量可以被类中⽅法、构造⽅法和特定类的语句块访问。
(3)类变量:类变量也声明在类中,⽅法体之外,但必须声明为 static 类型。
3、构造⽅法每个类都有构造⽅法。
如果没有显式地为类定义构造⽅法,Java 编译器将会为该类提供⼀个默认构造⽅法。
在创建⼀个对象的时候,⾄少要调⽤⼀个构造⽅法。
构造⽅法的名称必须与类同名,⼀个类可以有多个构造⽅法。
4、封装封装是指⼀种将抽象性函式接⼝的实现细节部分包装、隐藏起来的⽅法。
封装可以被认为是⼀个保护屏障,防⽌该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接⼝控制。
修改属性的可见性来限制对属性的访问(⼀般限制为private),可通过getter和setter⽅法访问和操作类中私有成员变量。
如下代码:class BookClass{private String title;private int pageNum;BookClass(){};// 设置名称public void setTille(String title) {this.title = title;}public String getTitle() {return title;}// 设置页数public void setPageNum(int pageNum) {if (pageNum>=200) {this.pageNum = pageNum;} else {System.out.println("页数输⼊错误,图书页数不能⼩于200页,设置为默认值200");this.pageNum = 200;}}public int getPageNum() {return pageNum;}// 显⽰图书信息public void detail() {System.out.println("图书名称为:"+title+",页数为:"+pageNum);}}5、继承在 Java 中通过 extends 关键字可以申明⼀个类是从另外⼀个类继承⽽来的。
简述面向对象的概念
面向对象是一种编程思想,将问题抽象成对象,通过对象之间的交互来解决问题。
面向对象的概念包括以下几个要点:
1. 类:类是对象的模板,定义了对象的属性和行为。
它可以看作是一种数据类型,通过实例化类可以创建对象。
2. 对象:对象是类的一个具体实例,具有自己的状态(属性)和行为(方法)。
对象可以相互交互,通过调用方法来完成特定的功能。
3. 封装:封装是面向对象的一种特性,将数据和操作数据的方法封装在一个对象中,隐藏内部实现细节,只提供对外的接口。
4. 继承:继承是指一个类可以派生出子类,子类继承了父类的属性和方法,并可以在此基础上进行扩展或修改。
5. 多态:多态是指同一类型的对象,在不同的情况下可以呈现出不同的行为。
通过继承和重写父类的方法,实现不同对象对同一消息的响应。
面向对象的编程思想使得程序的设计更加灵活和易于维护,通过抽象、封装、继承和多态,可以提高代码的复用性、可扩展性和可读性。
1.1 知识要点1.面向对象技术的基本概念∙面向对象技术是以对象为基础、以事件或者消息来驱动对象执行处理的程序设计技术。
∙对象是包含客观事物特征的抽象实体,是属性和行为的封装体。
在程序设计领域,可以用“对象=数据+作用于这些数据上的操作”这一公式来表达。
∙类是对具有相同属性和行为的一组对象的抽象描述。
∙事件是系统产生的动作或是运行应用程序产生的动作。
事件通过消息描述,消息是描述事件发生的信息。
∙消息是对象间交互的手段,是要求某个对象执行某个操作的规格说明。
2.面向对象技术的基本特征∙抽象性是指忽略事物中与当前目标无关的非本质特征,而强调本质特征的特征。
∙封装性是指把对象的属性和行为封装在一起,并尽可能隐藏对象的内部细节的特征。
∙继承性是指特殊类的对象拥有其一般类的属性和行为的类与类之间层次关系的特征。
∙多态性是指不同对象收到相同消息时可以产生多种不同的行为方式的特征。
【重点】∙面向对象技术的概念。
∙类与对象的概念及关系。
∙面向对象与面向过程程序设计的区别。
∙面向对象技术的基本特征。
面向对象技术与Visual C++学习指导2【难点】∙类与对象的概念。
∙面向对象与面向过程程序设计的区别。
∙面向对象技术的基本特征。
1.2 习题解答1.什么是面向对象技术?【问题解答】面向对象技术是一种以对象为基础,以事件或消息来驱动对象执行处理的程序设计技术。
它具有抽象性、封装性、继承性及多态性。
2.面向对象与面向过程程序设计有什么不同?【问题解答】面向对象与面向过程程序设计有如下不同:(1)面向过程程序设计方法采用函数(或过程)来描述对数据的操作,但又将函数与其操作的数据分离开来;面向对象程序设计方法将数据和对数据的操作封装在一起,作为一个整体来处理。
(2)面向过程程序设计方法以功能为中心来设计功能模块,难于维护;而面向对象程序设计方法以数据为中心来描述系统,数据相对于功能而言具有较强的稳定性,因此更易于维护。
(3)面向过程程序的控制流程由程序中预定顺序来决定;面向对象程序的控制流程由运行时各种事件的实际发生来触发,而不再由预定顺序来决定,更符合实际需要。
面向对象通俗理解
面向对象是一种程序设计方法,它将数据和操作结合起来,并将其封装在一起,形成一个对象。
对象具有属性和方法,可以和其他对象进行交互。
面向对象的编程思想强调模块化和重用性,使得程序更易于维护和扩展。
一个对象由属性和方法组成。
属性是对象的特征,例如人的姓名、年龄、性别等;方法是对象可以执行的操作,例如人可以走路、说话、吃饭等。
对象可以用类来描述,类定义了对象的属性和方法,并且可以用来创建多个对象。
面向对象的编程思想有三个基本特征:封装、继承和多态。
封装指将数据和操作封装在一起,只对外提供必要的接口;继承指子类可以继承父类的属性和方法,并且可以进行修改和扩展;多态指相同的方法可以处理不同类型的对象,例如动物可以有不同的子类,都可以调用“吃”的方法。
面向对象的编程思想可以使得程序更易于理解和维护,因为它将复杂的问题分解成多个简单的对象,并且对象之间可以相互协作。
它也可以提高程序的重用性和可扩展性,因为可以通过继承和多态来创建新的类和对象,而不需要重新编写大量的代码。
- 1 -。
面向对象的三个基本特征(讲解)面向对象的三个基本特征是:封装、继承、多态。
封装封装最好理解了。
封装是面向对象的特征之一,是对象和类概念的主要特性。
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
继承面向对象编程 (OOP) 语言的一个主要功能就是“继承”。
继承是指这样一种能力:它可以使用现有类的所有功能,并在无需重新编写原来的类的情况下对这些功能进行扩展。
通过继承创建的新类称为“子类”或“派生类”。
被继承的类称为“基类”、“父类”或“超类”。
继承的过程,就是从一般到特殊的过程。
要实现继承,可以通过“继承”(Inheritance)和“组合”(Composition)来实现。
在某些 OOP 语言中,一个子类可以继承多个基类。
但是一般情况下,一个子类只能有一个基类,要实现多重继承,可以通过多级继承来实现。
继承概念的实现方式有三类:实现继承、接口继承和可视继承。
➢实现继承是指使用基类的属性和方法而无需额外编码的能力;➢接口继承是指仅使用属性和方法的名称、但是子类必须提供实现的能力;➢可视继承是指子窗体(类)使用基窗体(类)的外观和实现代码的能力。
在考虑使用继承时,有一点需要注意,那就是两个类之间的关系应该是“属于”关系。
例如,Employee 是一个人,Manager 也是一个人,因此这两个类都可以继承 Person 类。
但是 Leg 类却不能继承 Person 类,因为腿并不是一个人。
抽象类仅定义将由子类创建的一般属性和方法,创建抽象类时,请使用关键字 Interface 而不是 Class。
OO开发范式大致为:划分对象→抽象类→将类组织成为层次化结构(继承和合成) →用类与实例进行设计和实现几个阶段。
多态多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特性以不同的方式运作。
面向对象的理解并举例面向对象(Object-oriented)是程序设计方法论的一种流派,从抽象的角度考虑处理和解决问题,让程序可以表示真实世界和模拟真实世界的分析和模拟操作,它被认为是程序开发方面的一种思想。
一、定义:面向对象是程序设计方法论的一种流派,它从抽象的角度考虑处理和解决问题,使程序可以实现对真实世界和模拟真实世界的分析和模拟操作,是程序开发方面的一种思想。
它强调的是开发者的思维由概念对象转变为对对象类的抽象,在创建任何软件时,在任何情况下都要先从物理过程和具体事物出发,将它们抽象为可封装、可复用的对象,而不是从易操作的、可运行的程序出发。
二、特点:1、面向对象就是以“对象”为中心,将程序中每一个部分都要以“对象”的形式表示。
2、面向对象有自己的一套编程思想,重在“对象”和“类”的概念,以及对象和类之间的联系,也就是“继承”的概念。
3、面向对象把程序分为两个部分:逻辑部分和数据部分,它能让程序拥有更强的可维护性和可扩展性。
4、面向对象的思想是以属性和行为来描述对象,对象之间存在着关系,关系由多态(polymorphism)实现。
三、优点:1、易扩展性:由于面向对象程序设计得到了实现,比传统的程序设计模式更容易扩展及共享,减少代码的重复,可以把基本功能编写在一个类中,然后在不同的子类上添加不同的行为,对对象和对象之间的关系可以以多种方式实现,比如继承和关联等。
2、重用性:面向对象程序设计可以利用现有的类,通过继承获得类的信息,这样可以节省时间和提高可重用性。
3、可维护性:面向对象程序设计能够使程序员及早地探测和解决程序可能出现的重大问题,降低模块之间的耦合,减少非利期间的变更,以便在修改部分代码时能够尽量减少影响的范围,从而增加程序的可维护性。
四、应用:1、面向对象的主要应用就是软件开发,比如游戏、系统程序和应用软件等等,此外,面向对象程序设计也广泛应用于数据库开发。
2、计算机可视化图形,如OpenGL、DirectX、RenderWare等,用于图形缓冲以及对象渲染,也都是建立在面向对象技术之上的,从而实现视觉效果。
第二章:面向对象概述此教程自ITjob软件开发教程网提供,特此分享,互相学习!学习目标⏹掌握什么是面向对象以及面向对象的主要特点⏹了解OOA、OOD、OOP的概念以及之间的关联⏹了解面向对象程序语言的发展简史面向对象(Object Oriented)面向对象是一个广泛使用但涵义并不清晰的术语。
上世纪80年代面向对象主要指一种程序设计方法,但在随后的发展中,面向对象的方法已经渗透到计算机软件领域的许多分支。
在了解面向对象之前我们必须得了解两个重要概念:对象和类。
What is an Object?首先,我们来了解一下什么是对象。
对象的概念最早出现于五十年代人工智能的早期著作中,在现实世界中,我们可以将对象定义为:对象(Object):一个具有明确行为的有形实体,具有行为和状态,有着清晰的边界。
以面向对象的眼光来看待现实世界,现实世界中的每一个具体事物,我们都会将其看作一个对象,比如狗、电视机、自行车等,都可以是对象。
狗有特定的名称、毛色、品种、会饿等特点,还有狗叫、尾巴左右摇摆等动作;同样的,自行车也有品牌、重量等特点,同时具备换速、刹车等动作;依此类推,我们不难发现,现实中的每一个对象都会有自己的特点以及相关动作,我们将对象所有特点(属性)称之为对象的状态,而动作称之为行为。
属性(Attribute):对象的一种内在的或独特的性质、特点、质量或特征,它构成了一个独一无二的对象(摘自<<Objects-Oriented Analysis and Design with Applications>>)每一个学生具备名称、性别、年龄、身高、长相、爱好等属性,通过这些属性我们可以很快地区分所有的学生对象,因为这些属性构成了每一个独一无二的学生对象。
比如说,在大部分情况下,我们会通过学生名称来区分每一个学生对象。
我们经常会说:某某人很高,某某人很年轻等,高和年轻实际上就表现出某一个对象的内在的特点。
因此,可以这样理解,我们是通过每一个对象特有的属性来区分各个对象。
注意:属性都有其对应的值,而且某些属性值是可以动态改变的,比如学生的体重、爱好是可以改变的,而DNA、指纹却是不能改变的。
随着属性值的改变,状态也随之改变了。
比如,学生甲的身高值逐渐增长了,那学生甲的状态也发生了变化----长高了!状态的具体定义如下:状态(State):包含对象的所有属性以及属性值,会随着属性值的改变而改变。
没有一个对象是孤立存在的,对象之间是相互作用的。
行为就是指这种作用。
行为(Behavior):是一个对象根据它的状态改变和消息传送所采取的行动和做出的反应,代表了对象对外的可见、可测试的动作。
(摘自<<Objects-Oriented Analysis and Design with Applications>>)行为和状态是相互的。
Dog处于饿的状态时,就会采取进食等行为,进食完毕后,Dog又会处于饱的状态。
现实中,大多对象是通过接受另一个对象传递的一个消息(操作)来改变自身的状态。
比如:驾驶员扭动汽车启动钥匙至关闭位置,此时,汽车关闭引擎。
其中,驾驶员、汽车都是对象,而关闭引擎则是一个特定消息,是由驾驶员传递给汽车的消息,汽车根据这个消息改变状态---从启动状态变为关闭状态。
因此,消息实际上就是一个对象对另一个对象施加的操作。
小练习列举现实生活中5种对象以及相关的属性和可能的行为?在软件开发中,对象一词的正式应用是在Simula*语言中,在Simula中对象是用来描述现实的某个方面。
对象的范围更广,除了现实中描述的对象之外,还包括在软件设计中产生的一些产物,这些产物一般用来实现更高级的行为功能。
Simula--20世纪60年代产生的一种面向对象语言,是所有基于对象和面向对象语言的原型,用于描述系统和开发仿真的语言。
在软件中,对象代表一个单独的、可确认的实体,可以是具体的也可以是抽象的,必须有明确定义的一个这样的角色。
相似对象的属性和行为在它们的共同类中定义。
在软件中,对象可能有很清晰的边界,然而却是抽象的;也可能是具体存在的,但边界不明确。
注意,软件中的对象和现实中对象同样有其自身的状态和行为!每一个对象在软件中都会拥有自己的空间(内存)和唯一标识名。
一般,我们也将对象称之为实例(instance)。
通俗地讲,对象指的是客观世界中的实体,它能"知道一些事情"(即存储数据),"做一些工作"(即封装服务),并"与其它对象协同"(通过交换消息),从而完成(模块化)系统的所有功能。
对象反映了系统保存和处理现实世界中某些事物的信息的能力。
What is Class?在现实世界中,我们会将所有脊椎动物对象进行分类:鸟类、两栖爬行类、哺乳类,比如我们将leopard、tiger、monkey等脊椎对象都归纳为哺乳类,而eagle、crane、swan属于鸟类。
那我们又是怎样去判断哪种动物是属于哪一类的?我们发现,leopard、tiger、monkey都具备viviparity(胎生)、lactation(哺乳)、coat(皮毛)等哺乳动物特征,而eagle、crane、swan却具备feather(羽毛)、flight(飞翔)、beak(喙)等鸟类特有的特征。
不难发现,。
这些对象都具有一些共同的属性和行为,通过这些属性和行为的划分,我们将leopard、tiger、monkey划分为哺乳类,而eagle、crane、swan划分为鸟类。
类和对象是紧密关联的,没有对象就没有类!类的定义:类(Class)是一组共享公共属性结构和公共行为的对象的集合。
类可以是一种抽象,即不是具体存在的,它实际上是对一组对象的公共部分的归纳集合,而对象却是一个具体的存在,是实体而非抽象。
我们可以这样说:类Mammal代表所有哺乳动物的共有特征,所有的非公有特征都不属于类Mammal,比如皮毛的颜色、喜好的食物等都不会归纳到类Mammal。
而当我们想去识别某个特定的哺乳动物时,就必须指定"这个哺乳动物"或者"那个哺乳动物",即对象,也就是说,当我们需要去分析哺乳动物特有的属性和行为时,那就必须针对具体的对象来研究,而不是针对一个抽象的类!注意:在软件开发中,我们将一个对象称之为类的一个实例。
没有公共结构和公共行为的对象,我们不能将它们组合在一个类中。
比如,我们都知道不能将pinaster和squirrel组合成一个类,是因为pinaster和squirrel并没有共享结构和公共行为,比如 pinaster有枝叶而squirrel没有,squirrel能行走而pinaster不能等等。
在现实世界中,我们认识事物的时候都是首先将所见事物进行分类,然后按照每种类别去逐一研究事物对象。
同样,在软件领域中,我们也是将问题进行分解分类(将大问题分解成许多小问题,每个小问题可以归纳为一类),然后再针对每一类进行分析设计以及实现,这就是广义的面向对象。
面向对象定义:尽量模仿现实世界,在软件中将复杂问题中的实体都作为一个对象来处理,然后根据这些对象的结构和行为再划分出类(即实现问题的分解),最后实现软件的模拟仿真。
也可以理解为:现实世界中的实体抽象成模型世界、程序世界中的对象和类,设计它们以完成预期任务并具有更好的可维护性和健壮的结构。
注意:在软件领域中,类包含了对象的属性和行为的定义,是一组属性和行为操作的集合!只有掌握了对象和类的概念,我们才能清晰、准确地明白什么是面向对象!当然,对面向对象的深入了解还必须掌握面向对象的一些相关特性,在下一小节我们将具体学习。
面向对象的主要特性程序语言发展到如今,已出现了多种风格不一的编程语言,大体主要分为以下两种风格的语言:⏹面向过程(以C语言为代表)⏹面向对象(Java、Smalltalk、C++等)并不是说哪种语言是最好的,每种风格语言的好坏是针对不同方面的应用程序而言的。
比如说,面向过程语言适用于计算密集型操作(复杂算法等)的设计,而面向对象适用于广阔的应用程序范围(这也是Java能迅速发展并占据广大市场的原因之一)。
面向过程(Process Oriented):基于该风格的程序的设计都是在想怎样才能一步一步的解决问题,思维方式是过程,或是说步骤。
那怎么区分面向过程和面向对象的区别,只要是具备以下特点的语言我们都可以将其看作为实现了面向对象的语言:抽象(Abstraction)在前面,我们已知道通过抽象创建出了类,类就是抽象的一种表示。
抽象是解决问题复杂性的一种基本方法,抽象会重点强调我们应该注意什么,而不应该注意什么!通过抽象我们可以着重实现需关注的细节而忽略一些非实质性或无关紧要的细节,从而能够更好的分析问题解决问题!抽象:表示一个对象与其它所有对象区别的基本特征,为不同的观察者提供不同的角度来观察对象。
对同一个对象---电视机,维修员只会关注电视机的内部结构:线路是否断裂、显像管是否损坏等,而购买电视的客户却只会关心电视机的画面是否逼真、外观是否好看等等,客户不会也不用关心电视机的内部结构。
可以看出,维修员只关心电视机的内部,购买用户只关心电视机的外观及实用性,他们观察电视机的角度不一致,这就是抽象的实现,在现实生活中,到处都存在着抽象!抽象强调实体的本质、内在的属性,在软件开发中,抽象指的是在决定如何实现对象之前对对象的意义和行为的定义----即类的实现!通过对类的了解,我们也可以将抽象定义为:从许多事物中舍弃个别的、非本质的特征,抽取共同的、本质性的特征。
为什么需要抽象?首先,问题的复杂性日益增长,其中描述的事物也越来越复杂,如果分析员去了解每一个事物的所有方面,那将是一个穷举耗时、低效率的工作其次,如果没有识别所有对象的共同特征的行为,那么对这些对象的分类将无法进行!对象分类是面向对象中非常重要的环节,而抽象则是实现该环节的必须解决方案!抽象的本质就是将问题分解,在面向对象中,所有对象被抽象成各种类,从而让程序员集中关注于功能的实现!小练习列举现实生活中的抽象例子,最少3例。
封装(Encapsulation):我们再来思考上面的例子,对于客户来说,他只会关心电视机的外观及性能是否良好等方面,电视机中的显像管、集成电路板对客户而言是不可见的,即电视机的生产商已将这些配件通过电视机外壳包装了起来,对客户,配件是隐藏的!现实中,这样的例子很多,比如计算机对于购买者而言,其组成部分CPU、Mainboard、HD等PC配件都被封装在机箱内,是不可见的!封装:是一种信息隐蔽技术,是一个划分抽象的结构和行为的过程。
封装和抽象是互补的,抽象着重于对象的行为,而封装着重于对象的行为的实现。