您的位置:首页 > 职场人生

黑马程序员1. 面向对象

2014-06-25 19:47 148 查看
-------android培训java培训java学习型技术博客、期待与您交流!
----------


今天看了毕向东老师基础第五天的视频,学习了面向对象相关的知识,在这里总结一下。

1.首先什么是面向对象:

面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术发展到一定阶段后的产物。早期的计算机编程是基于面向过程的方法,例如实现算术运算1+1+2
= 4,通过设计一个算法就可以解决当时的问题。随着计算机技术的不断提高,计算机被用于解决越来越复杂的问题。一切事物皆对象,通过面向对象的方式,将现实世界的事物抽象成对象,现实世界中的关系抽象成类、继承,帮助人们实现对现实世界的抽象与数字建模。通过面向对象的方法,更利于用人理解的方式对复杂系统进行分析、设计与编程。同时,面向对象能有效提高编程的效率,通过封装技术,消息机制可以像搭积木的一样快速开发出一个全新的系统。面向对象是指一种程序设计范型,同时也是一种程序开发的方法。对象指的是类的集合。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。

起初,“面向对象”是专指在程序设计中采用封装、继承、多态等设计方法。
面向对象的思想已经涉及到软件开发的各个方面。如,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计(OOD,Object Oriented Design)、以及我们经常说的面向对象的编程实现(OOP,Object Oriented Programming)。
面向对象的分析根据抽象关键的问题域来分解系统。面向对象的设计是一种提供符号设计系统的面向对象的实现过程,它用非常接近实际领域术语的方法把系统构造成“现实世界”的对象。面向对象程序设计可以看作一种在程序中包含各种独立而又互相调用的对象的思想,这与传统的思想刚好相反:传统的程序设计主张将程序看作一系列函数的集合,或者直接就是一系列对电脑下达的指令。面向对象程序设计中的每一个对象都应该能够接受数据、处理数据并将数据传达给其它对象,因此它们都可以被看作一个小型的“机器”,即对象。
举个生活中的例子,小张要去买电脑,一般买电脑有三个步骤,1.查阅相关资料,2.咨询报价,3.砍价。但是他什么都不懂。所以他叫上了懂行的老李,这样以上过程都由老李来做了,在这里老李就相当于对象。通过找老李这个对象,买电脑这个过程由复杂变得简单了,小张由过程的执行者变成了指挥者。
再举个例子,软件公司为什么要招人去干活?原因是要提高工作效率。现在有个软件公司老板懂技术,啥都能自己做。他接了一个项目,自己一个人做,做了5年,终于做完了,他就是面向过程。他累得半死,决定找人帮忙,最后找了5个人,这样他把工作分配下去,就不用干别的了。这样他从执行者变成了指挥者,而招的那些人就是对象。
总的来说,面向对象时一种思想,可以让复杂问题简单化,可以让我们的角色从执行者变为指挥者。
写程序的时候,我们首先要做的其实不是定义功能,而是先要面向对象,确定要操作的对象之后,再确定这个对象里面要确定什么功能,要什么就把什么写到对象里面去,这个就是把功能封装起来。下回要使用这个功能的时候,首先得先找到这个对象。所以开发的时候首先去找看java是不是已经提供了相关的对象,有就直接拿来用。如果没有对象,就造一个,然后把功能写到里面去,这样不光你能用别人也能用(提高复用性)。
面向对象有三个特征:封装,继承,多态。软件开发其实就是找对象使用。没有对象就创建对象。找对象,建立对象,使用对象,维护对象的关系。

2.类和对象的关系。
类就是对现实生活中事物的描述,而对象就是这类事物实实在在存在的个体。对于计算机语言而言,是先有的类再有的对象,而往大了说,应该是先有了对象,然后才想到去描述它,才有了类。举个例子,现实生活中的对象:张三,李四。想要描述:提取对象的共性,对具体的抽象。这两个对象的共性包括:姓名,年龄,性别,学习java的能力。在java中,类就是描述,而对象是通过new产生的实体。这些实体在堆内存当中。这些对象中包含着很多的数据,对象就是用于存放数据的,凡是用来存储数据的都成为实体,存放在堆内存当中。在定义类的过程中,属性对应类中的变量,行为对应类中的函数(方法)。定义类,就是在描述事物,就是在定义属性和行为。属性和行为共同称为类中的成员(成员变量和成员方法)。
堆内存中的变量都有默认初始化值。之后显示初始化值会覆盖默认初始化值。类类型变量存储对象的地址值,这样类类型变量就指向了对象。代码如下:
Carc = new Car();//c就是一个类类型变量。记住:类类型变量指向对象。

对象存在之后就能指挥对象做事情了。在java中指挥方式是:对象.对象成员。比如:
class Car

{

//描述颜色

String color = "红色";

//描述轮胎数

int num = 4;

//运行行为。

void run()

{

System.out.println(color+".."+num);

}

}

c.color= "blue";
c.run();

多个引用指向同一个对象:
Car c = new Car();
c.num = 5;
Car c1 = c;//把c的值赋给c1,这样c1也指向了那个对象
c1.color = "green";
c.run();//打印结果是 5..green

成员变量和局部变量:1.作用范围,成员变量作用于整个类中,局部变量作用于函数中,或者语句中。2.在内存中的位置,成员变量在堆内存中,因为对象的存在,才在内存中存在。而局部变量存在于栈内存中。成员变量的作用范围非常大,类中的方法可以直接访问这些成员变量。
主函数是程序的入口,代表程序可以独立运行。但是一般情况下,一个程序会有多个类,只要有一个入口就可以了,不要有多个入口。
可以直接在本类中创建本类对象。

3.匿名对象
匿名对象是对象的简化形式
匿名对象有两种使用情况:1.当对象的方法仅一次调用时,这样写比较简化(但是当对一个对象进行多个成员调用,必须给这个对象起个名字)。2.匿名对象可以作为实际参数进行传递。

举例:
Car c = new car();
c.num = 5;
可以简写为:
new Car().num = 5;//这个对象没有名字
但是:
new Car().num = 5;//没意义

new
Car().color = "green";//没意义

new
Car().run;//有意义
给匿名对象定义属性是没有意义的,因为没有类类型变量指向它,在堆内存中存在了一定时间之后,就变成垃圾了,而定义方法是有意义的,因为方法有运行内容在里面。
使用方式2:
main()
{
Car q = new Car();
show(q);
}
public static void show(Car c)
{
c.num = 3;
c.color = "black";
c.run();
}
对应的图片:


可以改为:
show(new Car());//匿名对象作为实际参数进行传递
对应的图:



-------android培训java培训java学习型技术博客、期待与您交流!
----------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: