Java基础-第六章(面向对象1)

2018-02-27 11:35:58来源:oschina作者:PengTdy人点击

分享

一.软件的开发概述

软件设计的原则:为了提高软件的开发效率,降低软件开发成本,一个优良的软件系统应该具有以下特点:


1.可重用性

遵循DRY原则,减少软件中的重复代码;


2.可扩展性

当软件需要升级增加新的功能,能够在现有的系统架构上方便的创建新的模块,而不需要改变软件的现有结构,也不会影响已经存在的模块;


3.可维护性

当用户需求发生变化时,只需要修改局部模块中少量的代码即可;


如何让软件系统达到上述的特点,我们对模块的要求:


1).结构稳定性:

在软件设计阶段,把一个模块划分为更小的模块时,设计合理,是系统结构健壮,以便适应用户的需求变化;


2).可扩展性:

当软件必须增加新的功能时,可在现有的模块基础上创建新的模块,该模块继承了原有模块的一个特性,并且还具有一些新的特性,从而实现软件的可重用性和可扩展性;


3).可组合性:

若干模块经过组合,形成大的系统,模块的可组合性提高软件的可重用性和可维护性,并且能简化软件开发过程;


4).高内聚性:

内聚,强调一个模块内的功能联系,每个模块只完成特定的功能,不同模块之间不会有功能重叠,高内聚性可以提高软件的可重用性和和维护性;


5).低耦合性:

低耦合,强调的是多个模块之间的关系,模块之间相互独立,修改某一个模块,不会影响到其他的模块,低耦合性提高了软件的可维护性;


二.软件的开发方式
1.面向过程

一种较早的编程思想,顾名思义该思想就是站在过程的角度思考问题,强调的就是功能行为,功能的执行过程,即先做什么,后做什么;而每个功能我们都使用函数(类似于方法)把这些步骤一步一步实现,使用的时候依次调用函数就可以了;


最小的程序单元是函数,每个函数负责完成某一个功能,用以接受输入数据函数对输入的数据进行处理,然后输出结果数据;


整个软件系统由一个一个的函数组成,其中作为程序的入口的函数称之为主函数,主函数依次调用其他的函数,普通函数之间可以相互调用,从而实现整个系统功能;


面向过程的缺陷:面向过程的设计, 是采用自上而下的设计方式,再设计阶段就需要考虑每一个模块应该分解成那些子模块,每一个子模块又细分为更小的子模块,如此类推,直到将模块细化为一个个的函数;


存在的问题:

1.设计不够直观与人类的思维习惯不一致;
2.系统软件适应性差,可扩展性差,维护性低;

面向过程最大的问题就是在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃;为了解决这一种软件危机,所以我们提出了面向对象;


2.面向对象

一种基于面向过程新的编程思想,顾名思义该思想就是站在对象的角度思考问题,我们把多个功能合理的放到不同的对象里,强调的是具备某些功能的对象;


具备某种功能的实体,称之为 对象;


面向对象最小的程序单元是 类;


3.面向对象的优势和特点

面向对象更加符合我们常规的思维方式,稳定性好,可重用性强,易于开发大型的软件产品,有良好的可维护性;在软件工程上,面向对象可以使工程更加模块化,实现更低的耦合和更高的内聚;


面向对象的三大特征:

1.封装
2.继承
3.多态

封装是指将对象的实现细节隐藏起来,然后通过公共的方法来向外暴露对象的功能;


继承是面向对象实现软件复用的重要手段,当子类继承父类后,子类是一种特殊的父类,能直接或间接获得父类里的成员;


多态是可以直接把子类对象赋值给父类变量,但是运行时依然表现出子类的行为特征,这意味着同一类型的对象在运行时可能表现出不同的行为特征;



注意:千万不要误解为面向对象就一定优于面向过程的设计;



三.类和对象
1.什么是抽象

从特定的角度出发,从已经存在的事物中抽取我们所关注的特性,行为;从而形成一个新事物的思维过程,是一种从复杂到简洁的思维方式;


2.对象和类的关系

实体:存在于现实世界中并且可以与其他的物体区分开来的物体,实际存在的个体;


对象:对象是人们要进行研究任何事物,一切事物都可以认为是对象;


对象具有状态和行为


通过对多个同类型的对象分析,我们可以把对象抽象成类;


类:具有相同特性(状态)和行为(功能)对象的抽象就是类,因此对象的抽象是类,类的具体化就是对象,也可以说类的实例是对象,类实际上就是一种数据类型;


类具有特性,对象的状态,用成员变量来描述,封装数据;


类具有功能,对象的行为,用方法来描述;


什么是类:类是对象的类型/模板,创建一个对象,就是使用一个类作为构建该对象的基础;实际上,解释类和对象的关系确实存在着”先有蛋还是先有鸡”的问题,描述类少不了对象,相反,描述对象也少不了类;不过在面向对象编程里,我们肯定是先有类,如果没有类,对象就无法实例化;



总结: 对象是类的实例,类是对象的模板;



3.类的定义
[修饰符] class 类名{
0~N个成员变量(字段/Field),不要叫属性(JavaBean中特殊的一种成员)
0~N个方法
}

定义类的注意:

1.如果类使用public修饰符,必须保证当前文件名称和类名相同;
2.类名使用名词表示,类表示某一类事物,首字母大写,如果是多个单词组成使用驼峰表示法;
3.在面向对象的过程中,定义类的时候,专门为描述对象提供一个类,该类不需要main方法,再定义一个测试类/演示类来运行程序;4.对象基本操作
1.对象的创建和使用 1.根据类来创建对象的语法类名 变量 = new 类名(); 2.给字段设置值对象变量.字段 = 该类型的值; 3.获取字段的值该字段类型 变量 = 对象变量.字段值; 4.通过对象调用对象变量.方法(实参);
2.对象的生命周期

对象什么时候出生:每次使用new关键字的时候,就会在内存开辟新的空间,此时对象开始存在;


对象的结束:当堆中的对象,没有被任何变量所引用,此时该对象就成了垃圾,就等着垃圾回收器(GC)来回收该垃圾,被回收的时候,对象就被销毁了,回收垃圾的目的,释放更多的内存空间;


3.匿名对象

没有名称的对象,创建对象之后没有赋给某一个变量;


new Serverant();// 匿名对象

匿名对象只是在堆中开辟一块新的内存空间,但是没有把空间地址赋给任何变量,因为没有名称;匿名对象仅仅只能使用一次,一般把匿名对象作为方法的实参传递;


4.对象的打印操作

打印对象的时候,打印出来的效果,如: Serverant@2345235;


5.对象的比较操作

==号:

1.对于基本数据类型来说,比较的是值;
2.对于引用类型来说比较的是内存中的地址值;

每次使用new关键字,都表示在堆中新开辟一块内存空间,不同的内存空间,地址值不同;


四.构造器

创建一个学生对象的时候:


Student s = new Student();

这个代码特别像,在调用一个方法;一个名称为Student的无参方法;


我们把这种特殊的方法,称之为构造方法,构造器(构造函数:Constructor);


但是我们发现在Student类,却找不到该构造方法(找不到,却又没有报错);编译器在编译源文件的时候,会创建一个缺省的构造器;


1.构造器的作用 1.创建对象,凡是必须和new一起使用;
2.完成对象的初始化操作;2.构造器的特点 1.构造器的名称和当前所在类的名称相同;
2.禁止定义返回类型,千万不要使用void作为返回类型,void Student(){}这是普通方法;假设需要写返回类型,也应该这样写: Student();既然所有的返回类型和所在的类名相同,何必再写;
3.在构造器中不需要使用return语句;其实构造器是有返回值的,返回的是当前创建对象的引用;3.缺省构造器

编译器创建的默认构造器(缺省构造器)的特点:

1.符合构造器的特点;
2.无参数的;
3.无方法体;
4.如果类A没有使用public修饰,则编译器创建的构造器也没有public修饰,使用了public修饰,则编译器创建的构造器也使用public修饰;4.构造器重载

构造器是一种特殊的方法也存在重载;


避免了在同一个类中,相同的功能方法名字不同的问题;


五.static修饰符
1.类成员的特点
1).static修饰的成员(字段/方法),随着所在类的加载而加载;

当JVM把字节码加载进JVM的时候,static修饰的成员已经存在于内存中了;


2).优先于对象存在

对象是我们手动通过new关键字创建出来的;


3).static修饰的成员被该类型的所有的对象所共享

根据该类型创建出来的任何对象,都可以访问static成员;


4).直接是用类名访问static成员

因为static修饰的成员直接属于类,不属于对象,所以直接使用类名访问static成员;


2.类成员和实例成员的访问

类中的成员:字段 方法 内部类;


类成员: 使用static修饰的成员;


实例成员: 没有使用static修饰的成员;


类成员只能访问类成员,实例成员只能访问实例成员;


类成员,直接属于类,可以通过类来访问static字段和static方法;


实例成员,只属于对象,通过对象来访问非static字段和非static方法;(对象其实可以访问类成员,但是底层依然是使用类名访问);


在static方法中,只能调用static成员; 否则报错: 无法从静态上下文中引用非静态变量;


非static方法,可以访问静态成员,也可以访问实例成员;


3.类成员的使用

利处:对对象的共享数据进行单独空间存储,节省空间,没有必要每一个对象中都存储一份,可以直接被类名调用;


弊端:生命期过长;


反馈与建议 博客:我的CSDN博客
邮箱:pengtdy@gmail.com
QQ交流群:644402856(新)

感谢你阅读这篇博客。如果您喜欢这篇博客就请关注我和朋友一起分享吧!

微信扫一扫

第七城市微信公众平台