面向对象
什么是面向过程?:
面向过程的设计:
最小的程序单元是函数,每个函数负责完成某一个功能,用以接受输入数据,函数对输入数据进行处理,然后输出结果数据.
整个软件系统由一个个的函数组成,其中作为程序入口的函数称之为主函数,主函数依次调用其他函数,普通函数之间可以相互调用,从而实现整个系统功能.
面向过程的设计,是采用指定而下的设计方式,在设计阶段就需要考虑每一个模块应该分解成哪些子模块,每一个子模块有细分为更小的子模块,如此类推,直到将模块细化为一个个函数.
存在的问题:
1.设计不够直观,与人类的习惯思维不一致.
2.系统软件适应性差,可拓展性差,维护性低.
面向过程最大的问题在于随着系统的膨胀,面向过程将无法应付,最终导致系统的崩溃。为了解决这一种软件危机,我们提出面向对象思想。
引出面向对象:
“面向对象”(英语:Object Oriented,简称OO)是一种以事物为中心的编程思想。
面向对象程序设计(英语:Object-oriented programming,缩写:OOP),是一种程序开发的方法。它将对象作为程序的基本单元,将程序和数据封装其中,以提高软件的重用性、灵活性和扩展性。
面向对象时相对于面向过程而已的(c则是一个典型的面向过程的语言),站在面向对象的角度去看问题,你则是对象的动作的指挥者。如果站在面向过程的角度去看问题,你则是动作的执行者。
强调的是功能行为,面向过程”是一种以过程为中心的编程思想。“面向过程”他们不支持丰富的“面向对象”特性(比如继承、多态),就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。面向过程在这一系列工作的执行中,强调的是工作的执行。
面向对象:一种基于面向过程的新的编程思想,顾名思义该思想是站在对象的角度思考问题,我们把多个功能合理的放到不同对象里,强调的是具备某些功能的对象。
具备某种功能的实体,称为对象
面向对象的三大特征:
封装(encapsulation)
继承(inheritance)
多态(polymorphism)
抽象
开发的过程:其实就是不断的创建对象,使用对象,指挥对象做事情。
设计的过程:其实就是在管理和维护对象之间的关系.
例如:
吃饭
1:面向过程 1:自己动手做 2:买菜 3:洗菜 4:煮饭炒菜 5:很难吃,浪费时间 2:面向对象 1:找专业对象 2:餐馆.点餐 3:餐馆,做饭 4:饭好吃,节约时间,精力
局部变量和成员变量
成员变量:定义在类中的变量
局部变量 定义在方法中的变量
定义变量的语法:
数据类型 变量名 = 值;
变量的范围 :
成员变量:成员变量在整个类中都有效
局部变量:只在其中声明的方法内有效
变量的初始值 :
成员变量: 它存储在堆中,如果没有赋初值
它有默认值:整数byte、short、int、long =0;
char=’\uoooo’ (表示空)
boolean =flase;
局部变量: 没有初始值,所以必须先手动初始化才能使用.
变量的生命周期:
成员变量: 它属于对象,它随着对象的创建而创建,随着对象的消失而消失
局部变量: 使用完马上释放空间。
什么时候使用成员变量和局部变量?
1:考虑变量的生存时间,这会影响内存开销。
2:扩大变量作用域,不利于提高程序的高内聚。
开发中应该尽量缩小变量的作用范围,如此在内存中停留时间越短,性能也就更高。
不要动不动就使用static修饰,一般,定义工具方法的时候,static方法需要访问的变量,该变量属于类,此时才使用static修饰字段.
也不要动不动就使用成员变量,因为存在着线程不安全问题,能使用局部变量尽量使用局部变量.
什么是封装?
1.把对象的状态和行为看成一个统一的整体,将二者存放在一个独立的模块中(类);
2.“信息隐藏”, 把不需要让外界知道的信息隐藏起来,尽可能隐藏对象功能实现细
节,向外暴露方法,保证外界安全访问功能; 使用private私有化,不准外界访问,把方法使用public修饰,允许外界访问.
封装的好处
1:隐藏了类的具体实现,防止调用者随意修改系统属性
2:提高组件的重用性.
3:提高对象数据的安全性
访问权限控制修饰符:
private: 表示私有的, 表示类访问权限. 只能在本类中访问,离开本类之后,就不能直接访问.
不写(缺省):表示包私有,表示包访问权限. 访问者的包必须和当前定义类的包相同才能访问.
protected:表示子类访问权限,同包中的可以访问,即使不同包,但是有继承关系,也可以访问.
public:表示全局的,可以公共访问权限,如某个字段/方法,使用了public修饰,则可以在当前项目中任何地方访问.
protected:一般,在继承关系中,父类需要把一个方法只暴露给子类.
class PersonDemo
{
public static void main(String[] args)
{
Person p1 = new Person();
p1.setAge(10);
p1.name = "abc";
System.out.println(p1.name);
System.out.println(p1.getAge());//获取年龄
}
}
class Person
{
String name;
private int age; //私有化
public void setAge(int a)
{
if (a<0)
{
System.out.println("年龄不能为负数");
return;
}
age = a ;
}
public int getAge() //获取年龄的方法
{
return age;
}
}
构造方法
构造方法的作用:
1):创建对象,凡是必须和 new 一起使用.
2):完成对象的初始化操作.
构造方法的特点:
1):构造方法的名称和当前所在类的名称相同.
2):禁止定义返回类型,
3):在构造方法中,不需要使用return语句.其实构造方法是有返回值的,返回的是当前创建对象的引用.
构造方法注意的细节
1.当类中没有定义构造函数时,系统会指定给该类加上一个空参数的构造函数。这个是类中默认的构造函数。当类中如果自定义了构造函数,这时默认的构造函数就没有了。
2.在一个类中可以定义多个构造函数,以进行不同的初始化。多个构造函数存在于类中,是以重载的形式体现的。因为构造函数的名称都相同。
public class PersonDemo
{
public static void main(String[] args)
{
Person p = new Person("person");
System.out.println(p.name);
}
}
class Person //创建人类
{
String name = null;//人的名称
//自定义构造器
Person(){}//无参数的构造器
Person(String n)//有参数的构造器
{
name = n; //把n的值赋给name字段
}
}