面向对象的基本概念

1.对象技术

包含了抽象 ,封装,多态(abstraction, encapsulation, polymorphism) 来构建软件结构,并且和语言,数据库等其他工具来支持的原则。


2.面向对象技术发展的里程碑

  Simula(1967)Smalltalk(1972)c++(late 1980s)java(1991) the UML(1996) UML2(2004)


3.OOP重要概念

(1)对象。 
对象是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则、计划或事件。 

(2)
对象的状态和行为。 
对象具有状态,一个对象用数据值来描述它的状态。 
对象还有操作,用于改变对象的状态,对象及其操作就是对象的行为。 
对象实现了数据和操作的结合,使数据和操作封装于对象的统一体中 

(3)
类。 
具有相同或相似性质的对象的抽象就是类。因此,对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象。 
类具有属性,它是对象的状态的抽象,用数据结构来描述类的属性。 
类具有操作,它是对象的行为的抽象,用操作名和实现该操作的方法来描述。 

(4)
类的结构。 
在客观世界中有若干类,这些类之间有一定的结构关系。通常有两种主要的结构关系,即一般--具体结构关系,整体--部分结构关系。 

一般——具体结构称为分类结构,也可以说是“或”关系,或者是“is a”关系。 
整体——部分结构称为组装结构,它们之间的关系是一种“与”关系,或者是“has a”关系。 

(5)
消息和方法。 
对象之间进行通信的结构叫做消息。在对象的操作中,当一个消息发送给某个对象时, 消息包含接收对象去执行某种操作的信息。发送一条消息至少要包括 说明接受消息的对象名、发送给该对象的消息名(即对象名、方法名)。一般还要对参数加以说明,参数可以是认识该消息的对象所知道的变量名,或者是所有对象 都知道的全局变量名。 

类中操作的实现过程叫做方法,一个方法有方法名、参数、方法体


4.对象的三个重要特性

(1)行为--可以对对象施加哪些操作和方法?

(2)状态--当施加那些方法后,对象应如何反应?

(3)标识--如何区分具有相同状态和行为的不同对象?


5.对象的属性和方法

1类属性用来记录该类的某个性质而与具体的实例无关,无论声明多少它的实例,该属性仅此一个。

2)描述一个对象能做什么,能够解决一个问题,一定范围内的典型的操作


6.四个重要的面向对象的原则

(1)抽象。 
抽象是指强调实体的本质、内在的属性。在系统开发中,抽象指的是在决定如何实现对象之前的对象的意义和行为。使用抽象可以尽可能避免过早考虑一些细节。 

类实现了对象的数据(即状态)和行为的抽象。 

(2)
封装性(信息隐藏)。 
封装性是保证软件部件具有优良的模块性的基础。 
面向对象的类是封装良好的模块,类定义将其说明(用户可见的外部接口)与实现(用户不可见的内部实现)显式地分开,其内部实现按其具体定义的作用域提供保护。 
对象是封装的最基本单位。封装防止了程序相互依赖性而带来的变动影响。面向对象的封装比传统语言的封装更为清晰、更为有力。

(3)继承性。 
继承性是子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来进行,把这个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。 

继承性是面向对象程序设计语言不同于其它语言的最重要的特点,是其他语言所没有的。 

在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继承。 
在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。 
在软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重性。 
采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特性能够共享,提高了软件的重用性。

4)模块化。

把一个复杂的系统分成一些部分,使其让人们更加易于理解,使用


7.面向对象的一般的常用三层结构

GUI

domain

Database


 

8.接口和类继承

 (1)接口中不能有非抽象方法,但抽象类中可以有。 

 (2)一个类能实现多个接口,但只能有一个父类。 

 (3)接口并不属于继承结构,它实际与继承无关,因此无关的类也可以实现同一个接口。

“interface”(接口)关键字使抽象的概念更深入了一层。我们可将其想象为一个“纯”抽象类。它允许创建者规定一个类的基本形式:方法名、自变量 列表以及返回类型,但不规定方法主体。接口也包含了基本数据类型的数据成员,但它们都默认为static和final。接口只提供一种形式,并不提供实施 的细节。 

接口这样描述自己:“对于实现我的所有类,看起来都应该象我现在这个样子”。因此,采用了一个特定接口的所有代码都知道对于那个接口可能会调用 什么方法。这便是接口的全部含义。所以我们常把接口用于建立类和类之间的一个“协议”。有些面向对象的程序设计语言采用了一个名为“protocol” (协议)的关键字,它做的便是与接口相同的事情。 

为创建一个接口,请使用interface关键字,而不要用class。与类相似,我们可在interface关键字的前面增加一个public关键字(但只有接口定义于同名的一个文件内);或者将其省略,营造一种“友好的”状态。 

为了生成与一个特定的接口(或一组接口)相符的类,要使用implements(实现)关键字。我们要表达的意思是“接口看起来就象那个样子,这儿是它具体的工作细节”。除这些之外,我们其他的工作都与继承极为相似。

 


9.UML

1)用于OOAOOD的标准标记

2)分类




10.类之间的关系

类与类之间的关系对于理解面向对象具有很重要的作用,以前在面试的时候也经常被问到这个问题,在这里我就介绍一下。
类与类之间存在以下关系:
(1)
泛化(Generalization)
(2)
关联(Association)
(3)
依赖(Dependency)
(4)
聚合(Aggregation)

UML图与应用代码例子:
1.
泛化(Generalization)
[
泛化]
表示类与类之间的继承关系,接口与接口之间的继承关系,或类对接口的实现关系。一般化的关系是从子类指向父类的,与继承或实现的方法相反。
[
具体表现]
父类 父类实例=new 子类()
[UML
](1.1)

1.1 Animal类与Tiger,Dog类的泛化关系

[
代码表现]

 

 

class Animal{}   

class Tiger extends Animal{}   

public class Test   

{   

    public void test()   

     {   

         Animal a=new Tiger();   

     }   

}  

 


2.依赖(Dependency)
[
依赖]
对于两个相对独立的对象,当一个对象负责构造另一个对象的实例,或者依赖另一个对象的服务时,这两个对象之间主要体现为依赖关系。
[
具体表现]
依赖关系表现在局部变量方法的参数,以及对静态方法的调用
[
现实例子]
比如说你要去拧螺丝,你是不是要借助(也就是依赖)螺丝刀(Screwdriver)来帮助你完成拧螺丝(screw)的工作
[UML
表现](1.2)


1.2 Person类与Screwdriver类的依赖关系

[
代码表现]


public class Person{   

    /** 拧螺丝 */  

    public void screw(Screwdriver screwdriver){   

         screwdriver.screw();   

     }   

}  


3.关联(Association)
[
关联]
对于两个相对独立的对象,当一个对象的实例与另一个对象的一些特定实例存在固定的对应关系时,这两个对象之间为关联关系。
[
具体表现]
关联关系是使用实例变量来实现
[
现实例子]
比如客户和订单,每个订单对应特定的客户,每个客户对应一些特定的订单;再例如公司和员工,每个公司对应一些特定的员工,每个员工对应一特定的公司
[UML
] (1.3)

1.3 公司和员工的关联关系

[
代码表现]


public class Company{   

    private Employee employee;   

    public Employee getEmployee(){   

        return employee;   

     }   

    public void setEmployee(Employee employee){   

        this.employee=employee;   

     }   

    //公司运作   

    public void run(){   

         employee.startWorking();   

     }   

}  


(4)聚合(Aggregation
[
聚合]
当对象A被加入到对象B中,成为对象B的组成部分时,对象B和对象A之间为聚集关系。聚合是关联关系的一种,是较强的关联关系,强调的是整体部分之间的关系。
[
具体表现]
与关联关系一样,聚合关系也是通过实例变量来实现这样关系的。关联关系和聚合关系来语法上是没办法区分的,从语义上才能更好的区分两者的区别。
[
关联与聚合的区别]
(1)
关联关系所涉及的两个对象是处在同一个层次上的。比如人和自行车就是一种关联关系,而不是聚合关系,因为人不是由自行车组成的。
聚合关系涉及的两个对象处于不平等的层次上,一个代表整体,一个代表部分。比如电脑和它的显示器、键盘、主板以及内存就是聚集关系,因为主板是电脑的组成部分。
(2)
对于具有聚集关系(尤其是强聚集关系)的两个对象,整体对象会制约它的组成对象的生命周期。部分类的对象不能单独存在,它的生命周期依赖于整体类的 对象的生命周期,当整体消失,部分也就随之消失。比如张三的电脑被偷了,那么电脑的所有组件也不存在了,除非张三事先把一些电脑的组件(比如硬盘和内存) 拆了下来。
[UML
](1.4)

1.3 电脑和组件的聚合关系

[
代码表现]


public class Computer{   

    private CPU cpu;   

    public CPU getCPU(){   

        return cpu;   

     }   

    public void setCPU(CPU cpu){   

        this.cpu=cpu;   

     }   

    //开启电脑   

    public void start(){   

        //cpu运作   

         cpu.run();   

     }   

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值