面向对象开发的几个核心的思想和概念



1、问题领域、对象、属性、状态、行为、方法、实现

问题领域:
指软件系统所模拟的真实世界中的系统,在现实生活中,比较常见的比如,税收、社保、银行、商场等等,都可以使用软件来进行模拟,这些就是软件所针对的问题领域。

对象:
对象是对问题领域中的事物的一种抽象。
1)所有的东西都是对象,万物皆对象,问题领域中的实体和概念都可以抽象为对象。
2)世界上没有完全相同的两片叶子,每个对象都是唯一的,对象的唯一性来自于真实世界中的事物的唯一性,即使在系统中java的两个对象,内存地址也未必相同。
3)每个对象具有属性和行为。
4)每一个对象都具有状态,状态的意思就是在某一个时间点上,对象的各个属性的取值情况。
5)对象都属于一个类,每个对象都是某一个类的实例,类是具有相同属性和行为的对象的集合,同一个类的所有的实例都具有相同的属性,表示他们的属性的含义是相同的,但是他们的状态未必是相同的,也就是属性的取值未必是一样的。

2、类、类型
类:
类是一组具有相同属性和行为的对象的抽象。类以及类的关系构成了对象模型的主要内容。
面向对象变成的主要任务就是定义对象模型中的各个类。
对象是类的实例,类是对象的模板。

3、消息、服务
消息可以理解为参数,服务,就是方法返回的值。

4、接口
什么是接口?
对象,通过接口对提供服务。在现实的世界中,接口是实体,但是在面向对象的范畴中,接口是一个抽象的概念,指的是系统对外提供的服务。系统的接口描述系统能够提供哪些服务,但是不包含服务的实现的细节。对象是最小的子系统,每个对象都是服务提供者,因此每一个对象都具有接口。
站在使用者的角度上,对象中所有向使用者公开方法的声明构成了对象的接口。使用者调用对象的公开方法来获得服务,使用者在获得服务的时候,不需要关心对象到底是如何实现服务的。
接口,是实现系统之间松耦合的有力手段。
计算机系统也是一个充分利用接口来提高系统松耦合的例子,接口还提高了系统的可扩展性。

在java语言中,接口有两个方面的意思:
1)接口是指概念性的接口,也就是系统对外提供的所有的服务,在对象中表现的是public类型的方法的声明。
2)是指interface为关键字定义的实实在在的接口,也成为接口类型,用于明确的描述系统所提供的服务,能够更加清晰的把系统的实现细节与接口分离。

5、封装、透明
封装
封装是指隐藏对象的属性和实现的细节,仅仅对外公开接口,封装能够带来的优点如下:
1)便于使用者能够正确、方便的理解和使用系统,防止使用者错误修改系统的属性。
2)有助于建立各个系统之间的松耦合关系,提高系统的独立性,当一个系统的实现发生变化的时候,只要她的接口不发生变化,就不会影响到其他的系统。
3)提高系统的可重用性,每个系统都是一个相对独立的整体,可以在多种环境中得到重用。
4)降低了构建大型系统的风险,就类似于搭积木一样,个别的系统不成功,但是代码还是可以被重用的。

一个设计良好的系统会封装所有的实现细节,把它的接口与实现能够清晰的隔离起来,系统之间只通过接口进行通信。面向对象的编程语言主要通过访问控制机制来进行封装,这种机制能够控制对象的属性和方法的可访问性。在java语言中提供了如下四种方式的访问级别:
public(公开)private(私有)protected(同一个包、子类)default(同一个包)
把尽可能多的东西藏起来,然后对外提供间接的接口,如果封装的程度越高,那么相对的独立性就越高,这样使用起来就会更加的方便。
把所有的属性封装起来,至少有几个好处:更符合客观世界规律、更灵活的控制属性访问级别、防止用户错误操作、有助于对象封装实现细节。

6、抽象
抽象
从特定的角度出发,从已经存在的一些事物当中抽取我们所关注的细节,形成一个新的事物的思维过程。抽象是一种从具体到抽象、由复杂到简单的思维方式。
三种类型的抽象:
1)从问题领域到软件模型中的对象的抽象
2)从对象到类的抽象
3)从子类到父类的抽象

在java语言中,抽象有两种意思:
1)抽象,是一种思维过程,包含上面三种方式的抽象
2)抽象,是一个形容词,可以用来修饰类以及方法,如果一个方法被abstract修饰的话,则说明这个方法没有被具体实现,如果一个类被abstract修饰,则说明这个是抽象类,不能被实例化。

7、继承、扩展、覆盖
在父类和子类之间同时存在着继承和扩展的关系。子类继承父类的属性以及方法,同时子类中还可以扩展出新的属性以及方法,并且还可以覆盖父类当中方法的实现方式。
继承与扩展同时提高了系统的可重用性和可扩展性。
继承与扩展导致了面向对象软件开发领域中的架构类软件系统的发展。

如何在一些通用的软件架构的基础上进行扩展呢?
  这些通用的软件架构中都提供了一些扩展点,简单的说,这些扩展点就是为了让用户进行继承和扩展的类。这些类已经具备了一些功能,并且能够和软件中的其他的类能够进行紧密的协作,用户只需要创建这些类的子类,然后在这些子类中增加新的功能或者是重新实现某些功能,用户定义的子类能够和系统中原有的类进行和谐融洽的协作。
比如:J2EE、Servlet、JSP、EJB、Struts、JSF、Spring这些都是一些通用的架构。

8、组合
组合 是一种用多个子系统来组装出复杂系统的有效的手段。
对于一个组合系统,组合系统和他的子系统是聚集关系,子系统之间则是关联关系或者是依赖关系(在UML中的定义)
面向对象的范畴中,组合具有以下的特点:
1)在软件的分析和设计的阶段,简化为复杂系统建立对象的模型。在建立对象模型的时候,通常首先识别问题领域的粗粒度对象,然后对该对象进行分解,比较符合人类的思维。
2)在软件编程的阶段中,假话创建复杂系统的过程,只需要分别创建独立的子系统,然后将其组合起来,就构成了一个复杂的系统。而且允许第三方参与系统的建设,提高了构架复杂系统的效率。
3)向使用者隐藏系统的复杂度。
4)提高程序代码的可重用性,一个独立的子系统可以被组合到多个复杂的系统当中。

9、多态、动态绑定
多态,是指系统A访问系统B提供的服务的时候,系统B可以通过多种方式来提供服务,而这一切对于系统A是透明的。

动态绑定,一个接口=new 实现类,这个实现类在运行的时候并不知道,可能是实现类A,也可能是实现类B,java虚拟机的这种运行机制被称为动态绑定。
抽象机制和动态绑定机制能够提高系统之间的松耦合性。

需要注意的一点是:抽象机制是开发人员在开发过程当中使用的机制,但是动态帮顶机制是在java虚拟机运行的过程中提供的机制。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值