面向过程编程与面向对象编程
面向对象编程是一种编程范式或编程风格。它以类或对象作为组织代码的基本单元,并将封装、抽象、继承、多态四个特性,作为代码设计和实现的基石 。
面向对象编程语言是支持类或对象的语法机制,并有现成的语法机制,能方便地实现面向对象编程四大特性(封装、抽象、继承、多态)的编程语言。
面向过程编程也是一种编程范式或编程风格。它以过程(可以理解为方法、函数、操作)作为组织代码的基本单元,以数据(可以理解为成员变量、属性)与方法相分离为最主要的特点。
<p>这些都不是官方的定义,不用太在意,我们知道这个概念,大概懂什么意思就ok了
举个例子看看面向过程和面向对象一般是怎么编写代码的
面向对象
struct User {
char name[64];
int age;
char gender[16];
};</p>
<p>struct User parse_to_user(char* text) {
// 将text(“小王&28&男”)解析成结构体struct User
}</p>
<p>char* format_to_text(struct User user) {
// 将结构体struct User格式化成文本("小王\t28\t男")
}</p>
<p>void sort_users_by_age(struct User users[]) {
// 按照年龄从小到大排序users
}</p>
<p>void format_user_file(char* origin_file_path, char* new_file_path) {
// open files...
struct User users[1024]; // 假设最大1024个用户
int count = 0;
while(1) { // read until the file is empty
struct User user = parse_to_user(line);
users[count++] = user;
}</p>
<p>sort_users_by_age(users);</p>
<p>for (int i = 0; i < count; ++i) {
char* formatted_user_text = format_to_text(users[i]);
// write to new file...
}
// close files...
}</p>
<p>int main(char** args, int argv) {
format_user_file("/home/zheng/user.txt", "/home/zheng/formatted_users.txt");
}
面向对象
public class User {
private String name;
private int age;
private String gender;</p>
<p>public User(String name, int age, String gender) {
this.name = name;
this.age = age;
this.gender = gender;
}</p>
<p>public static User praseFrom(String userInfoText) {
// 将text(“小王&28&男”)解析成类User
}</p>
<p>public String formatToText() {
// 将类User格式化成文本("小王\t28\t男")
}
}</p>
<p>public class UserFileFormatter {
public void format(String userFile, String formattedUserFile) {
// Open files...
List users = new ArrayList<>();
while (1) { // read until file is empty
// read from file into userText...
User user = User.parseFrom(userText);
users.add(user);
}
// sort users by age...
for (int i = 0; i < users.size(); ++i) {
String formattedUserText = user.formatToText();
// write to new file...
}
// close files...
}
}</p>
<p>public class MainApplication {
public static void main(String[] args) {
UserFileFormatter userFileFormatter = new UserFileFormatter();
userFileFormatter.format("/home/zheng/users.txt", "/home/zheng/formatted_users.txt");
}
}
可以观察出,通常面向过程,数据结构与函数是分开的,
而面向对象一般则是对象与方法在一起,特殊的对象包含特殊方法,十分符合人类生活空间
面向过程则更像是计算机思维,思考怎么把一个复杂的过程,抽出简单的方法拼接起来完成这个动作,当业务不复杂时,面向对象似乎看不出什么优势,但是面对多条线路面向过程就会很头疼,而面向对象只要设计好类,拼接一下就可以完成这些业务,加上自身语法支持,可以快速抽象,封装,继承,多态,使得代码更加的复用和拓展,安全,在面向过程的语言中,也可以写出面向对象的代码,只是代码的代价会有一点点大,他们也不是无一是处,他们拥有更快的性能,在操作系统内通常能看到他们的身影
评论区