目录
1. 不同编程语言在编程思想上又什么区别?
-
C语言采用面向过程
-
C++一半采用面向对象一半采用面向过程(半面向对象)
-
Java采用面向对象(完全面向对象)
2. 面向过程和面向对象的区别
面向过程
面向过程注重实现功能的步骤,以及步骤之间的因果关系(高耦合,低内聚)
实现一个功能需要分为四个步骤:A步骤、B步骤、C步骤,对于步骤之间的因果关系可以这样来看:
因为A步骤----->所以B步骤,因为B步骤----->所以C步骤。
对于一个项目要求实现两个功能:A功能,B功能,A功能需要2个步骤(A1步骤---->A2步骤),B功能也需要2个步骤(B1步骤--->B2步骤) ,
在面向过程开发会这样做:将A功能的步骤划分称一个模块A,将B功能中的步骤划分一个模块B,因为模块A(A1步骤---->A2步骤)----> 所以模块B(B1步骤--->B2步骤)
从上面的步骤来看,面向过程开发中,代码之间的关联程度很高,如果有一个步骤出错,会导致所有的功能都出现问题(牵一发而动全身)。
面向过程开发的优缺点
优点:在面向过程开发中,对于小型项目的开发,效率较高,前期不需要进行对象的提取、模型的建立,可以直接上手写代码,编写因果关系。(快速开发)
缺点:在面向过程开发中,没有对象的概念,代码直接按的黏连程度很高,扩展力很差。不适合用于大型项目开发。
面向对象
面向对象开发特点
面向对象编程思想,是以对象为主,更符合人类的思维方式。面向对象在开发中,把程序分为不同的单元,每个单元都实现成对象(这些对象都是独立的,彼此之间的关联程度很低),在给这些对象一个环境驱动一下,让他们彼此协作起来形成一个系统(使用面向对象开发程序:耦合度低,扩展里强)
面向对象开发的优缺点
用案例去理解面向过程与面向对象
蛋炒饭与盖饭:
蛋炒饭:
对于蛋炒饭来说,米饭和蛋混合在了一起,没有独立对象的概念。
假设客户提出需求,只要米饭不要鸡蛋怎么办?
对于客户提出的需求,软件开发者必须实现,于是开始扩展程序,这对于软件开发者来说是一场噩梦。
盖饭:对于盖饭来说,盖饭可以是由不同的菜(鱼香肉丝、香辣肉丝…) + 米饭组成,是有独立对象的概念,
鱼香肉丝可以看成一个独立对象,米饭也可以看成一个独立对象。
假设对象提出需求,我想吃鱼香肉丝盖饭。
软件开发者只需要将鱼香肉丝和米饭准备好,并且给他们一个“盖”的动作,这两个对象便组合在了一起。
假设用户不想吃鱼香肉丝盖饭了,想吃香辣肉丝盖饭
这时只需要将"鱼香肉丝"对象换成"香辣肉丝"对象即可。
面向过程主要关注的是:实现功能的步骤以及整个过程
面向过程主要关注的是:对象A、对象B、对象C,这些对象可以任意组合(ABC、BCA、CAB等…)
3. 面向对象的特征
封装,继承,多态(重载)
4. 面向对象开发软件生命周期
- OOA -----> 面向对象分析(Object-Oriented Analysis)
- OOD -----> 面向对象设计(Object-Oriented Design)
- OOP -----> 面向对象编程(Object-Oriented Programing)
5. Java面向对象
什么是类?
- 类是面向对象语言的程序设计中的概念,是面向对象编程的基础。类可以看成是创建Java对象的模板。
- 类的实质是一种引用数据类型,类似于byte、short、int(char)、long、float、double等基本数据类型,不同的是它是一种复杂的数据类型。因为它的本质是数据类型,而不是数据,所以不存在于内存中,不能被直接操作,只有被实例化为对象时,才会变得可操作。
- 类是对现实生活中一类具有共同特征的事物的抽象。如果一个程序里提供的数据类型与应用中的概念有直接的对应,这个程序就会更容易理解,也更容易修改。
- 一组经过很好选择的用户定义的类会使程序更简洁。此外,它还能使各种形式的代码分析更容易进行。特别地,它还会使编译器有可能检查对象的非法使用。
- 类的内部封装了属性和方法,用于操作自身的成员。类是对某种对象的定义,具有行为(behavior),它描述一个对象能够做什么以及做的方法(method),它们是可以对这个对象进行操作的程序和过程。它包含有关对象行为方式的信息,包括它的名称、属性、方法和事件。
- 类的构成包括成员属性和成员方法(数据成员和成员函数)。
- 数据成员对应类的属性,类的数据成员也是一种数据类型,并不需要分配内存。成员函数则用于操作类的各项属性,是一个类具有的特有的操作,比如“学生”可以“上课”,而“水果”则不能。类和外界发生交互的操作称为接口。
什么是对象?
- 对象就是一个真实世界中的实体,对象与实体是一一对应关系的,意思就是现实世界的每一个实体都是一个对象,所以对象是一个具体的概念。
- 类是对象的集合,对象是类的实例;对象是通过new className产生的,用来调用类的方法;类的构造方法 .。
举一个例子说明下类,比如Person(人)就是一个类,那么具体的某个人“张三”就是“人类”这个类的对象,而“姓名、身高、体重”等信息就是对象的属性,人的动作比如“吃饭、穿衣”等就是对象的方法。总之类就是有相同特征的事物的集合,而对象就是类的一个具体实例。同时类有多态和继承,例如“人类”可以分为“男人、女人”,“老人、小孩”那么“男人、女人”就是“人类”的子类等等。
Java语言中对类Person的定义往往如下:
public class Person {
private String name; //属性:姓名
private int height; //属性:身高
private int weight; //属性:体重
public Person() {}
public Person(String name, int height, int weight) {
this.name = name;
this.height = height;
this.weight = weight;
}
//... some methods...
public void doSth() { //行为:
//... do something
}
}
对象是类的具体的个体。比如,张三是类Person的一个对象。Person可能存在无数个对象(就好像地球上存在数十亿人一样)。
方法是被对象调用的比如“张三.穿衣()”,用static修饰的方法是静态的方法或称为共享方法,一般用类名直接调用。
Java中,对象的创建可以使用new来创建一个对象。比如:
Person zhangsan = new Person("Zhangsan", 170, 65); //创建对象:“Zhangshan”
zhangsan.doSth(); //对象行为:对象自己发出行为
类和对象的区别
- 类是一个抽象的概念,它不存在于现实中的时间/空间里,类只是为所有的对象定义了抽象的属性与行为。就好像“Person(人)”这个类,它虽然可以包含很多个体,但它本身不存在于现实世界上。
- 对象是类的一个具体。它是一个实实在在存在的东西。
- 类是一个静态的概念,类本身不携带任何数据。当没有为类创建任何对象时,类本身不存在于内存空间中。
- 对象是一个动态的概念。每一个对象都存在着有别于其它对象的属于自己的独特的属性和行为。对象的属性可以随着它自己的行为而发生改变。
类与对象的关系
- 类:是抽象、概念性的,是在现实世界中不存在的,是由人类观察一类对象并对其进行共性抽取(抽象) 而形成的一个模板(这个“模板”可以用于描述一类对象的共同特征)
- 对象:对象是在现实世界中一个具体存在的个体,世界上的任何物体都可以看作为一个对象,在程序开发中,对象是由类实例化(创建) 出来的。
- 实例:对象又被称作为实例
- 实例化:在程序开发中,创建对象便是类的实例化
- 抽象:此处的抽象是指,对一类对象进行共性提取,从而形成类
由上图可见,HUAWEI实体机和小米实体机都是一个对象,他们都是于安卓手机,将这两个对象的共同特征提取(抽象)出来,便是一个Android类,对于Android手机和Ios手机,将他们的共同特征继续提取(抽象)便成了一个手机类…
如何创建一个对象
首先需要有一个类,用于实例化对象
class User{
//属性(描述对象的状态信息)
int no; //用户编号
String username; //用户名
String password; //密码
//行为(描述对象的动作/行为)
sayHello();
public static void sayHello(){
System.out.println("你好,我是" + username + "很高兴认识你");
}
}
创建(实例化)对象:User u1 = new User();
new User(); ----> 此处会调用User类的无参构造方法
访问对象的属性(实例变量)和方法
- 访问对象的属性——格式:引用(对象名).属性名
- 访问对象的方法——格式:引用(对象名).方法名()
注意:引用不能为空,引用为空时访问实例相关的数据会报空指针异常(NullPointException)。
方法重载 ![](https://i-blog.csdnimg.cn/blog_migrate/7da29bbd6269feaf6b7fd9f33db6400d.png)
不定长参数:int。。。本质是数组,参数列表中只能用一个不定长参数,不定长参数必须在最后
访问权限
构造器构造方法
构造器的语法;
访问权限修饰符+方法名(就是类名)(){}
特点:
-
java在new一个对象的时候,会先看这个对象所在的类,有没有构造器,有什么样的构造器,如果没有构造器则无法构建对象
-
每个类会有一个默认的无参构造器
-
什么时候调用构造器:在对象被实例化的时候
-
类名 对象名 = new 构造器
-
我们创建对象实际是通过构造器创建的
-
如果一个类中显示的声明了一个构造器,只要写了构造器,就以你写的构造器为准,原来自带的无参构造器就失效