`
kong_desheng
  • 浏览: 22611 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类
最新评论

面向对象,还是面向对象!

阅读更多


当今世界的软件研发中,面向对象一直是主导的技术,包括OOA(Object Oriented Analysis)、OOD(Object Oriented Design)、OOP(Object Oriented Programming)。从具体的代码实现片段,到设计模式、系统架构,到业务分析,面向对象在软件开发中无处不在。面向对象的思想,是程序员、设计师、架构师、需求分析师的必备的核心技能。
然而,在现实中,深入掌握面向对象的技术人员,少之又少!
面向对象,有何难?为什么很多人学习和项目应用了很多年,还不能彻底掌握它?

究其根源,面向对象是一种思想,而非一种单纯的技术。面向对象,是一种分析问题、思考问题、解决问题的思维方法,其理论高度抽象,实际应用时需要具体问题具体分析、活学活用。一旦不是固定的模式,就像没有了数学公式和物理定律,很多人面对问题时就只会生搬硬套,机械照搬,根本就是死读书,读死书!

面向对象,只包括了三个基本概念:继承、封装和多态。

我常常在面试时询问应试者:这三个概念,你认为哪个最难?绝大多数人都认为,多态最难。

其实,多态是这三个概念中最简单的!因为多态的应用场景非常固定:通过父类的类型,调用虚函数,由子类来提供不同的实现。这种固定的用法,是最容易理解、最容易掌握的。之所以很多人认为多态最难,是因为多态这个词语对刚接触的人来说非常陌生,并且在面向对象、C++教程之类的书籍中,都用了大量的篇幅来介绍多态。相比之下,继承和封装的概念易于理解,一看就明白,因此也不觉得继承和封装有什么高深的。

恰恰是继承和封装这两个概念,一看就懂,可一用就错!

先说继承。所谓继承,就是子类具有父类的所有特性,包括所有数据和行为。因此,子类是父类,是一种特殊的父类。因此,在应用继承这种思想时,需要考虑清楚两件事情:
1)谁与谁之间存在继承关系?
2)需设计哪些数据和行为,用于继承?
当存在多重继承、多级继承时,这些问题就变得更加复杂。识别哪些对象之间存在继承关系,并不是一件容易的事情。尤其多级继承时,很多父类、祖父类在现实中都是不存在的,是抽象出来的。需要哪些数据、设计怎样的接口,用于继承?没有任何书来讲解这方面的内容。因为这是与项目的实际需求相关的,没有统一的标准答案。这就需要具体问题具体分析,灵活运用。

再说封装。封装,可以说是面向对象思想的最核心思想!封装的本质在于,封装了内部的数据,封装了内部的实现过程,对外界不可见。这样就创造了一个与外界隔离的环境,在这个环境中,可以自由改变内部的数据,改变内部的逻辑处理过程,只要保持对外的接口不变,外界就不受任何影响。这样修改这个类就不影响项目中的其它类,把业务逻辑的具体实现过程控制在一个固定的范围中,调试、修改、升级都很方便,项目变得可控。
因此,封装带来的好处是将复杂问题逐步分解,各实现部分隔离、解耦,从而使各个类之间、各模块间、各子系统间可以约定接口,并在实现上各自独立变化,从而可以分层设计。
因此,设计模式、架构分析与设计,都广泛采用封装思想。
应用封装时,要想清楚如下问题:
1)封装什么?
2)暴露什么?
3)接口如何设计?
没有任何书来讲解着方面的内容。这是与项目的具体需求相关的,没有标准答案。需要具体问题具体分析,灵活运行。

继承和多态,解决的是从对象之间从上而下、垂直方向的关系问题;而封装,解决的是对象与对象之间水平方向的协作问题。

想成为高水平的程序员,优秀的软件设计师、资深的系统架构师,那就反复研读面向对象吧,在项目中实践、思考、再实践、再思考!
0
1
分享到:
评论
1 楼 lyqidao 2010-03-23  
人人都谈对象 人人(程序员)面对对象(女友、男友)都是 一头雾水

相关推荐

    PLC的面向对象编程

    PLC(可编程逻辑控制器)面向对象编程是一种先进的编程模式,它借鉴了计算机高级语言中面向对象编程(OOP)的概念,并将其应用于工业控制系统中。尽管在PLC编程中无法完全实现面向对象语言的所有特点,比如“继承”...

    面向对象葵花宝典-电子版

    面向对象是目前最流行的一种程序设计和实现思想,无论你是从事企业级开发、互联网应用开发,还是手 机软件开发,都会使用到面向对象的技术;主流的编程语言中,C++,Java,C#,PHP,Python等都是支持 面向对象的语言;...

    易语言面向对象编程 面向对象学习

    易语言面向对象学习 1 一.枯燥的理论 2 1.对象和类 2 2.类的“成员”与“方法” 2 3.实例化 2 4.继承 3 二.牛刀小试 3 1.定义一个类,生成实例对象 3 2.“_初始化” 与 “_销毁” 5 三.一个更丰富的“员工...

    实用面向对象软件工程教程

    面向对象软件工程是一种现代的软件开发方法,它基于对象的概念,强调模块化、可重用性和灵活性。本教程“实用面向对象...无论是初学者还是经验丰富的开发者,都能从中受益匪浅,提升自己的面向对象软件工程实践能力。

    plc面向对象编程架构与实现

    面向对象编程是计算机语言的一种先进的编程模式,在工业控制系统的PLC程序中也可以采用这种设计思想,虽然我们无法实现面向对象的很多特点如“继承”,甚至于它根本就不具备面向对象编程语言的特点,但面向对象编程...

    面向对象概要设计模板

    面向对象概要设计模板 面向对象设计是一种软件设计方法,它强调对象之间的交互和协作,以达到软件系统的高内聚、低耦合的目标。在软件设计中,面向对象设计方法可以帮助开发者更好地理解系统的需求和行为,从而提高...

    Python 3面向对象编程

    Python 是一种面向对象的解释型语言,面向对象是其非常重要的特性。《Python 3面向对象编程》通过Python 的数据结构、语法、设计模式,从简单到复杂,从初级到高级,一步步通过例子来展示了Python 中面向对象的概念...

    面向对象分析与设计UML2.0(PDF)

    详细介绍了面向对象的分析与设计,全面探讨了面向对象概念、软件开发过程、UML和多层技术。本书使用最常见的技术和方法,通过一个贯穿全书的案例分析,对面向对象的软件开发过程和使用面向对象技术的编程过程进行了...

    漫画面向对象编程 Java

    借助于漫画展示的形式,面向对象的简、由类创建一个对象的方法、类的编写与对象的创建、类的构造函数、类的方法、修饰符、Java中的封装/继承/多态等特征、Java中的线程、用Java创建一个小世界、多线程共享数据,以及...

    面向对象软件工程

    《面向对象软件工程》 作者:Stephen.R.Schach 学校:(美)范德比尔特大学 书名原名:Objected-Oriented Software Engineering 目录: 第一部分 面向对象软件工程简介  第一章 面向对象软件工程的范畴  第二章 ...

    软件工程面向对象分析实验报告

    面向对象分析(Object-Oriented Analysis,OOA)是软件工程中的一种重要方法,它着重于从实际问题出发,抽象出问题域内的对象及其相互关系,以构建问题域模型。在“软件工程-张海藩编著--面向对象分析实验报告”中,...

    面向对象分析与设计.pdf

    由于提供的文件内容不包含实际的文本信息,而是重复的URL链接,因此无法从该部分提供有关面向对象分析与设计(OOAD)的知识点。但是,我将尽可能详细地介绍面向对象分析与设计的相关知识点,以满足您的需求。 面向...

    面向对象的23种设计模式 python实现(源码)

    面向对象的23种设计模式 python实现(源码),开箱即用! 面向对象的23种设计模式 python实现(源码),开箱即用! 面向对象的23种设计模式 python实现(源码),开箱即用! 面向对象的23种设计模式 python实现...

    面向过程、面向对象、面向组件、面向服务软件架构的分析与比较

    面向过程、面向对象、面向组件、面向服务软件架构的分析与比较 软件开发历程与架构演进 软件开发从汇编语言、过程式语言、面向对象、面向组件发展到面向服务,这一进程不仅反映了编程技术的不断进步,更是软件工程...

    面向对象软件开发过程

    面向对象的系统分析,直接用问题域中客观存在的事物简历模型中的对象,无论是度单个事物还是对事物之间的关系,都保留他们的原貌,不做转换,也不打破原有界限而重新组合,因此能够很好地映射问题域的客观事物。面向...

    java面向对象编程源码

    本书内容由浅入深,紧密结合实际,利用大量典型实例,详细讲解Java面向对象的编程思想、编程语法和设计模式,介绍常见Java类库的用法,总结优化 Java编程的各种宝贵经验,深入阐述Java虚拟机执行Java程序的原理。...

    面向对象分析与设计习题及部分答案

    面向对象方法是软件工程领域的一种系统分析和设计方法,它通过使用面向对象的基本原则和概念来构建软件系统。面向对象方法的核心在于模拟现实世界中的实体及其相互作用,以此来设计和实现软件。这种方法与传统的过程...

    面向对象分析与设计(第3版).pdf

    《面向对象分析与设计(第3版)》是一本非常有价值的参考书,无论对于初学者还是有经验的开发者来说都是非常有用的资源。它不仅系统地介绍了面向对象的基础理论,而且还提供了丰富的实践指导,使得读者能够在实践中...

Global site tag (gtag.js) - Google Analytics