从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问题,并根据这些事物的本质特点,把它们抽象地表示为系统中的对象,作为系统的基本构成单位(而不是用一些与现实世界中的事物相关比较远,并且没有对应关系的其它概念来构造系统)。这可以使系统直接地映射问题域,保持问题域中事物及其相互关系的本来面貌。
它可以有不同层次的理解:
从世界观的角度可以认为:面向对象的基本哲学是认为世界是由各种各样具有自己的运动规律和内部状态的对象所组成的;不同对象之间的相互作用和通讯构成了完整的现实世界。因此,人们应当按照现实世界这个本来面貌来理解世界,直接通过对象及其相互关系来反映世界。这样建立起来的系统才能符合现实世界的本来面目。
从方法学的角度可以认为:面向对象的方法是面向对象的世界观在开发方法中的直接运用。它强调系统的结构应该直接与现实世界的结构相对应,应该围绕现实世界中的对象来构造系统,而不是围绕功能来构造系统。
从程序设计的角度来看,面向对象的程序设计语言必须有描述对象及其相互之间关系的语言成分。这些程序设计语言可以归纳为以下几类:系统中一切皆为对象;对象是属性及其操作的封装体;对象可按其性质划分为类,对象成为类的实例;实例关系和继承关系是对象之间的静态关系;消息传递是对象之间动态联系的唯一形式,也是计算的唯一形式;方法是消息的序列。
面向对象
面向对象(Object
Oriented,OO)是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
谈到面向对象,这方面的文章非常多。但是,明确地给出对象的定义或说明对象的定义的非常少——至少我现在还没有发现。其初,“面向对象”是专指在程序设计中采用封装、继承、抽象等设计方法。可是,这个定义显然不能再适合现在情况。面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,Object
Oriented
Analysis),面向对象的设计(OOD,Object
Oriented
Design)、以及我们经常说的面向对象的编程实现(OOP,Object
Oriented
Programming)。许多有关面向对象的文章都只是讲述在面向对象的开发中所需要注意的问题或所采用的比较好的设计方法。看这些文章只有真正懂得什么是对象,什么是面向对象,才能最大程度地对自己有所裨益。这一点,恐怕对初学者甚至是从事相关工作多年的人员也会对它们的概念模糊不清。
面向对象是当前计算机界关心的重点,它是90年代软件开发方法的主流。面向对象的概念和应用已超越了程序设计和软件开发,扩展到很宽的范围。如数据库系统、交互式界面、应用结构、应用平台、分布式系统、网络管理结构、CAD技术、人工智能等领域。
比如说,我们要用程序来描述一个人。如果是以往的结构化编程,我们可能会这样;
例如用C语言的话,可能会建立一个结构体:
struct Person{
姓名;
年龄;
等等;...
}
然后用定义的一些函数来描述他的行为。比如void walk(struct p); void eat(struct p);等等。
然后使用 walk(p) 来描述行走,使用eat(p)来描述吃饭等。
这样不利于程序结构的维护。开发效率也不高。
但是用java面向对象方式,这一切就显得自然了。我们建立一个类,表示人:
class Person{
姓名
性别
体重
身高等..(人类都有的属性)
吃饭
睡觉 等行为(也就是人类都有的行为)
}
然后将类产生一个实例,就产生了一个'人'的对象。
Person xiaobai = new Person("小白",身高,体重...等参数);
如果要描述祖先后代的关系,很简单。只要让人类继承自Animal即可。
class Animal{
......
}
class Person extends Animal{
.......
}
这样动物有的属性和行为,人不用定义也可以拥有,符合自然规律~哈哈
面向对象不是java特有的,只是一种思想,如果你愿意,用结构化语言C语言也可以写出面向对象的代码。
在编写程序的时候,首先要考虑有哪几个类,然后是类里需要有什么方法和属性,最后是方法之间的关系是什么
就是一帮靠出书,搞培训赚钱的人炒出来的看似玄奥无比的理论,跟八股文类似,忽悠n多不明真相的人去“学习”,然后他们赚钱,你可以当它是狗屁。
刚学编程的人,针对一个很简单的问题,面个毛的对象啊,又不是搞什么多么复杂的工程。
是相对于以前的面向过程的;
面向对象描述的是兑现,也就是class类,
如:class People{String name;}
描述时是new People().name;
面向过程:name(People people);