Skip to the content.

第09讲 面向对象程序设计方法

C++ 是一门面向对象(Object Oriented)的语言。
视频地址:https://www.coursera.org/learn/cpp-chengxu-sheji/lecture/Av9Da/mian-xiang-dui-xiang-cheng-xu-she-ji-fang-fa

在 C++ 之前的 C 语言,是面向过程的语言,没有对象的概念,写程序时,需要直接将问题的整个流程用代码写出来,一环套一环,环环紧密结合(耦合)。用面向过程的语言肯定也能解决问题的,但有一些缺点:

视频中老师提到的结构化程序相关内容,比如问题分解、自顶向下的设计方法等等,我并不认为这是什么设计方法特有的,同时,也不认为它们有什么问题,这些无论是什么设计方法,都会用到的一些比较普遍的实践方法。

面向对象的设计方法,主要得益于程序语言对类型(class)的支持。具体在设计程序时,一般有下面一些步骤: 1. 分析问题(不管什么设计方法,这步都是必须的) 2. 抽象实体,建立类。类中包含抽象的实体属性和行为 3. 通过类建立不同的实体对象,并对类/对象之间业务逻辑编码。

C++ 中定义类型的一个简单示例:

#include <iostream>
#include <string>

using namespace std;

class Person {
private:
  string name;
  int age;

public:
  Person(string, int);
  void hello(Person person);
  string getName() { return name; };
  void setName(string name) { this->name = name; }
  int getAge() { return age; };
  void setAge(int age) { this->age = age; }
};

Person::Person(string name, int age) {
  this->name = name;
  this->age = age;
}

void Person::hello(Person person) {
  cout << "Hello, " << person.getName() << "!" << endl;
}

int main() {
  Person p("Chen", 5);
  p.hello(p);
  cout << "(He is " << p.getAge() << " years old.)" << endl;
  delete &p;
  return 0;
}

(代码下载)

它和 Java 类似,但也有不同,相应的 Java 版本可以这么写:

public class Person {
    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }

    void hello(Person p) {
        System.out.println("Hello, " + p.getName() + "!");
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public static void main(String[] args) {
        Person p = new Person("Chen", 5);
        p.hello(p);
        System.out.println("(He is " + p.getAge() + " years old.)");
    }
}

(代码下载)

以上两段代码是等效的,其中可以简单看出一些语法层面的不同,如


<Previous | Home | Next>