06 - 面向过程 VS 面向对象

2021-08-07  本文已影响0人  舍是境界

编程范式中,除了面向对象之外,被大家熟知的编程范式还有另外两种,面向过程编程和函数式编程。面向过程这种编程范式随着面向对象的出现,已经慢慢退出了舞台,而函数式编程目前还没有被广泛接受

在工作中,其实有很多人搞不清楚面向对象和面向过程的区别,总以为使用面向对象编程语言来做开发,就是在进行面向对象编程了。而实际上,他们只是在用面向对象编程语言,编写面向过程风格的代码而已,并没有发挥面向对象编程的优势。这就相当于手握一把屠龙刀,却只是把它当作一把普通的刀剑来用,相当可惜

所以,本文会详细对比一下面向过程和面向对象这两种编程范式,带你一块搞清楚下面这几个问题:

  1. 什么是面向过程编程与面向过程编程语言?
  2. 面向对象编程相比面向过程编程有哪些优势?
  3. 为什么说面向对象编程语言比面向过程编程语言更高级?
  4. 有哪些看似是面向对象实际是面向过程风格的代码?
  5. 在面向对象编程中,为什么容易写出面向过程风格的代码?
  6. 面向过程编程和面向过程编程语言就真的无用武之地了吗?

什么是面向过程编程与面向过程编程语言?

struct User {
 char name[64];
 int age;
 char gender[16];
};
struct User parse_to_user(char* text) {
 // 将text(“小王&28&男”)解析成结构体struct User
}
char* format_to_text(struct User user) {
 // 将结构体struct User格式化成文本("小王\t28\t男")
}
void sort_users_by_age(struct User users[]) {
 // 按照年龄从小到大排序users
}
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;
 }
 
 sort_users_by_age(users);
 
 for (int i = 0; i < count; ++i) {
   char* formatted_user_text = format_to_text(users[i]);
   // write to new file...
 }
 // close files...
}
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;
  
  public User(String name, int age, String gender) {
    this.name = name;
    this.age = age;
    this.gender = gender;
  }
  
  public static User praseFrom(String userInfoText) {
    // 将text(“小王&28&男”)解析成类User
  }
  
  public String formatToText() {
    // 将类User格式化成文本("小王\t28\t男")
  }
}
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...
  }
}
public class MainApplication {
  public static void main(String[] args) {
    UserFileFormatter userFileFormatter = new UserFileFormatter();
    userFileFormatter.format("/home/zheng/users.txt", "/home/zheng/formatted_users.txt");
  }
}

面向对象编程相比面向过程编程有哪些优势?

刚刚介绍了面向过程编程及面向过程编程语言的定义,并跟面向对象编程及面向对象编程语言做了一个简单对比。接下来,我们再来看一下,为什么面向对象编程晚于面向过程编程出现,却能取而代之,成为现在主流的编程范式?面向对象编程跟面向过程编程比起来,到底有哪些优势?

  1. OOP 更加能够应对大规模复杂程序的开发
  1. OOP 风格的代码更易复用、易扩展、易维护
  1. OOP 语言更加人性化、更加高级、更加智能

小结

上一篇下一篇

猜你喜欢

热点阅读