软件开发--面向对象
软件生命周期: 软件的产生直到报废的整个过程
软件生命周期内有:问题定义, 可行性分析, 总体描述, 系统设计,编码, 调试和测试, 验收与运行, 维护升级到废弃等阶段
软件的开发方式:
1):面向过程的开发
2):面向对象的开发
面向过程:
一种较早的编程思想,顾名思义该思想是站在过程的角度思考问题,强调的就是功能行为,功能的执行过程,即先干啥,后干啥。而每一个功能我们都使用函数(类似于方法)把这些步骤一步一步实现,使用的时候依次调用函数就可以了。
面向过程的设计:
最小的程序单元是函数,每个函数负责完成某一个功能,用以接收输入数据,函数对输入数据进行处理,然后输出结果数据.
整个软件系统由一个个的函数组成,其中作为程序入口的函数称之为主函数,主函数依次调用其他函数,普通函数之间可以相互调用,从而实现整个系统功能.
面向过程的缺陷:
面向过程的设计,是采用置顶而下的设计方式,在设计阶段就需要考虑每一个模块应该分解成哪些子模块,每一个子模块有细分为更小的子模块,如此类推,直到将模块细化为一个个函数
存在的问题:
1):设计不够直观,与人类的习惯思维不一致.
2):系统软件适应性差,可拓展性差,维护性低.
面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃。为了解决这一种软件危机,我们提出面向对象思想。
面向对象:
一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是具备某些功能的对象。
具备某种功能的实体,称为对象
面向对象最小的程序单元是:类.
对象:
现实中,随处可见的一种事物就是对象。通常把对象划分为两个部分,即静态部分和动态部分。
静态部分就是不能动的部分,这个部分被称为“属性”,任何对象都会具备其自身属性,如一个人,其属性包括高矮、胖瘦、性别、年龄等等。然而具有此属性的人会执行哪些动作也是一个不可规定的部分,这个人可以喜怒哀乐、说话、走路、睡觉等等,这些行为就是这个人具备的动态部分
比如一个人:
研究本质,所有的人都具有以上XXX同学的属性和行为,可以将这些属性和行为封装起来以描述整个“人”这一类的物种。
由此可见,类实质就是封装对象的属性和行为的载体,而对象是类抽象出来的一个实例。那么我们就引出了封装的概念。
封装:
什么是封装(面向对象三大特征之一)?
(1)把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类);
(2)"信息隐藏", 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细节,向外暴露方法,保证外界安全访问功能; 把所有的字段使用private私有化,不准外界访问,把方法使用public修饰,允许外界访问.
把所有数据信息隐藏起来,尽可能隐藏多的功能,只向外暴露便捷的方法,以供调用.
既然提及到了private 和 public,那我们就先说一下访问修饰符。
private:表示私有的, 表示类访问权限. 只能在本类中访问,离开本类之后,就不能直接访问.
无(default):表示包私有,表示包访问权限. 访问者的包必须和当前定义类的包相同才能访问.
protected:表示子类访问权限,同包中的可以访问,即使不同包,但是有继承关系,也可以访问.
public:表示全局的,可以公共访问权限,如某个字段/方法,使用了public修饰,则可以在当前项目中任何地方访问.
注意:一般字段都使用private修饰,表达隐藏,为了安全性.
拥有实现细节的方法,一般使用private修饰,不希望外界(调用者)看到该方法的实现细节.
方法一般使用public修饰,供外界直接调用.
封装的好处:
1):使调用者正确,方便地使用系统功能,防止调用者随意修改系统属性。
2):提高组件的重用性。
3):达到组件之间的低耦合性(当某一个模块实现发生变化时,只要对外暴露的接口不变,就不会影响到其他模块)。
举个例子:
package Test;
import java.util.Arrays;
/**
*
* @author FYDragon
*
*/
class animal{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
public class TestDemo {
public static void main(String[] args) {
animal cat = new animal();
cat.setName("来福");
System.out.println("这只猫名字叫:"+cat.getName());
}
}
分析:因为name变量设置的是private权限,所以只有animal类能够直接访问这个变量的相关信息,其他类如果想要访问这个变量的内容,就需要调用这个类的get和set方法。set来设置值,get来获取值。