学习笔记:面向对象概念初论

原创 2007年09月19日 10:55:00

我现在正在学习C#,以前一直是用c,c++,其实用c++也只是把他当作一个更好的c来用的。也就是说虽然用过面向对象的语言,但是没真正去应用面向对象的思想和方法。 现在呢,就想了利用博客,在此记录自己的学习过程。从小开始就习惯了3步曲。学到面向对象概念这里也来个三步走,第一是初论,二是中论,三是末论。

初论主要学到的是,何为抽象,什么是对象。

中论主要学到的是,对象互操作,对象间关系,对象群集。

末论主要学到的是,多态。

下面就来梳理一下初论中所涉及的内容。

作为软件开发者,主要的也就是把真实世界的各种状况进行软件建模。那么我们面对真实世界如此繁杂的信息海洋,应该如何从这些信息中提炼精华,而不知为其所淹没。人类的大脑天生懂得简化接收到的信息,让信息细节通过一种叫做“抽象(abstraction)”的过程得到管理。

第一,通过抽象进行简化。我们最熟悉的莫过于旅游时用的游览路线图。你就是来一次欧洲或者世界游,你都可以用一根线把他们连起来,把主要的公路,游览点等等这些重要特征标记出来,基本上就一目了然了。学过离散数学的人就更好理解了,离散数学中有图论部分,很多用其他数学不好证明和理解的东西,在图论中很轻松的就解决了。其中很大一个功劳在于图论的简单化处理。

第二,通过抽象来概括特征。这也是人类认识世界的一个过程,通过抽象,让模型变得越简单,让其越通用,那么该模型就越具有普遍性。我们对事物的认识也越清楚。

第三,将抽象模型组织为层级结构。当人类有了成千上万的抽象模型时。为了对付由此带来的复杂性,人类根据既定标准进行分类处理,也就是一个层级结构的划分。在科学领域将所有自然物区分为动物、植物,矿物质。而动物之中又可分为哺乳类,鱼类,鸟类,爬行类,两栖类,昆虫类。哺乳类下就有了狗,猫,猴子啊,等等等。每种类别都是有非常清楚的概念,什么才是动物,什么是植物,什么是矿物质。我们用这些概念,构造出一个自顶向下渐趋复杂的抽象层级结构。如果我们不对其进行层级结构的划分的话,那么我们可能总是面对着这些什么狗,猴子,鸽子,鸡啊等等等等,我们终究会精尽而亡。

作为软件开发中抽象又是怎样的呢?

首先用户有很多的需求,用户和你讲我们要怎么怎么样,我们想怎么样怎么样。到时候他们另外一个部门的什么人又来了,我们要怎么样怎样。各个部门不同的人和你讲了七七四十九天,你的笔记大概有九九八十一本了。哇,我们该怎么建立我们的软件模型呢,我们的模型是一个应该是一个怎么样的呢,怎么样才能满足那些人呢?那么我们就需要判断这些细节中哪些是与系统最终目标相关的,这是根本大计,因为我们不能对付所有细节!容纳太多细节的结果,就是让系统变得过于复杂,使之难以被设计、编码、测试、调试撰写文档和维护,以后也难以扩展。在构建一个软件系统时,所有抽象过程的容纳或排除动作,都必须给予该系统的总体目标、应用域和关注点进行考虑。

抽象的重用。

挑战

虽然抽象是人类自然而然的信息处理方式,但为软件系统开发合适的模型确实是一个不容易的工作,因为

1,存在无穷多可能。抽象是观察者眼力的延展:独立工作的观察者,几乎总是会造出彼此不同的模型,那个最棒?争论随之而来。

2,对于将来的复杂状况,永远不会有最好或正确的模型,对于要解决的问题只存在较好或较差的模型。同一情形可能有多种功效等同的建模方式。

3,但是要注意,的确存在不正确的模型:即错误的表达真实世界的模型。

4,要测知模型是否已经全然捕捉到用户需求,这可没有现成的试剂。判断一种抽象方案是否恰当的最终依据,是软件系统的成品。我们可不愿一直等到项目尾声才发现误入歧途。所以必须详细而明确的和下列人员沟通:

程序的用户

软件工程师

如何成为成功的对象建模者

为软件系统进行恰当的抽象和建模,需要

1,洞察问题的所在

2,创造力

3,好的倾听技巧

4,好的观察技巧

5,选定抽象方案的有组织过程。

6,与软件开发人员和用户就结果模型进行简要沟通。

7,在比较理想的情况下,我们还会使用软件工具来使这样的蓝图创建工作变得更加自动化。

 

何为对象。

对象是面向对象系统的基本构成块。

我们先来说说真实世界的对象。对象是:

1,某种可为人感知的物质

2,思维,感受或动作所作用的物质或精神体。

也就是物理对象和概念性对象。

软件对象是,一种将状态和行为合成到一起的软件构造,用来描述真实世界的一个物理或概念性的对象。

何为状态/属性/数据?

何为行为/操作?

可以访问对象的数据和修改/维护数据的方法.

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Java学习笔记之面向对象概念

对象: 其实就是该类事物实实在在存在的个体. 类与对象之间的关系? 类: 事物的描述 对象: 该类事物的实例. 在java中通过new来创建的 /* 描述小汽车 分...

PHP面向对象学习笔记之一:基础概念

1> if( "false" ) 等效于 if( true), 因为非空字符串是true 2> 检查数据类型:     is_array();     is_object(); &...

PHP学习笔记 -- 面向对象的核心概念

继承与多态都是对类进行复用,它们一个是类级别的复用,一个是方法级别的复用。 类的组合与继承。 低耦合、解耦、紧耦合。 继承存在的问题: 1.继承破坏封装性。 2.继承...

<JavaSE学习笔记>面向对象(1):类与对象的概念

类与对象的概念 一 面向对象的基本概念 面向对象程序设计(简称OOP)是当今主流的程序设计范型。对于一些规模较小的问题,使用传统的面向过程的开发方式比较理想。但问题一旦上了规模,采用面向对...

Java基础05天 学习笔记_面向对象(概念,封装,匿名对象,this关键字)

01 面向对象 概述 面向对象和面向过程。 面向过程注重功能,打开功能,存储功能,关闭功能, 前几天玩的就是过程。   把过程定义到对象中, 把功能封装到事物中,找到对象,就找到功能。...

Java学习笔记(5):3.面向对象之方法详解

方法是类或对象的行为特征的抽象,方法是类或对象最重要的组成成分。但从功能上看,方法完全类似于传统结构化程序设计里的函数。值得指出的是,Java里的方法不能独立存在,所有的方法必须定义在类里。方法在逻辑...

Java学习笔记<3>面向对象相关

面向对象的基本思想
  • wxwd1
  • wxwd1
  • 2014-08-14 18:15
  • 468
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)