面向对象(一)——面向对象基础
一、核心概念
1. 对象
-
本质:对象 = 属性(数据) + 方法(行为),是两者封装成的独立整体。
-
组成:对象名、属性、方法三部分。
-
核心思想:以对象为中心,而非以步骤为中心(区别于面向过程)。
-
面向对象程序设计语言C++、Java中,用 this.属性 和 属性 区分同名的成员变量和局部变量。
class Student {
private:
string name; // 成员变量
public:
void setName(string name) { // 局部变量(参数)
// this->name 指的是成员变量;右边的 name 是参数
this->name = name;
}
};
2. 消息
-
定义:对象间通信的载体。
-
机制:发送消息 → 对象解释 → 执行操作 → 消息传递。
3. 类
-
定义:对一组具有共同特征的对象的抽象描述,刻画这组对象的共同属性与行为。
-
核心关系:类是对象的抽象,对象是类的实例(一个类可创建多个不同实例对象)。
-
类的分类:
#include <iostream>
using namespace std;
// 类:人类
class Person {
public:
string name;
int age;
void sayHello() {
cout << "我是" << name << endl;
}
};
int main() {
Person p1; // 对象
p1.name = "张三";
p1.sayHello(); // 输出:我是张三
return 0;
}
4. 继承
-
定义:基于已有的类(父类 / 基类)创建新类(子类 / 派生类),复用父类的属性与方法。
-
特点:子类可直接继承父类的内容,也可扩展定义自身的属性与方法,实现功能复用与扩展。
class Animal {
public:
void eat() {
cout << "吃东西" << endl;
}
};
class Dog : public Animal {
public:
void bark() {
cout << "汪汪叫" << endl;
}
};
// 使用
Dog dog;
dog.eat(); // 继承自Animal:吃东西
dog.bark(); // 自己的方法:汪汪叫
继承的类型:

5. 多态
-
定义:同一消息(方法)发送给不同对象时,对象会产生不同的响应结果。
-
实现方式

-
多态的形式:
强制多态(类型转换)
int a = 5;
double b = 2.5;
double result = a + b; // a自动转换为double,变成5.0+2.5
过载多态(函数重载)
class Calculator {
public:
int add(int a, int b) {
return a + b;
}
double add(double a, double b) {
return a + b;
}
int add(int a, int b, int c) {
return a + b + c;
}
};
包含多态(虚函数覆盖)
class Animal {
public:
virtual void sound() { // virtual关键字实现动态绑定
cout << "动物叫" << endl;
}
};
class Dog : public Animal {
public:
void sound() override { // override可选,表示覆盖
cout << "汪汪" << endl;
}
};
// 使用
Animal* a = new Dog();
a->sound(); // 输出:汪汪(运行时决定)
delete a;
参数多态(函数模板/类模板)
// 函数模板
template <typename T>
T max(T a, T b) {
return (a > b) ? a : b;
}
// 类模板
template <typename T>
class Box {
private:
T item;
public:
void set(T t) { item = t; }
T get() { return item; }
};
// 使用
cout << max(3, 5) << endl; // 输出5
cout << max(3.14, 2.71) << endl; // 输出3.14
Box<string> box1;
box1.set("hello");
Box<int> box2;
box2.set(123);
6. 绑定
-
定义:将 “过程调用” 与 “执行代码” 关联的过程。
-
分类:
class Animal {
public:
void sound() { cout << "动物叫" << endl; } // 非虚函数
};
class Dog : public Animal {
public:
void sound() { cout << "汪汪" << endl; }
};
Animal* a = new Dog();
a->sound(); // 输出:动物叫(静态绑定,按指针类型决定)
动态绑定需要将方法声明为virtual,否则是静态绑定(编译时决定)。
二、面向对象分析(OOA)
-
核心目标:将数据与功能结合为综合对象,梳理系统中对象的行为与交互关系。
-
核心活动(固定顺序):
-
认定对象:从业务场景中提取核心 “名词” 作为对象,明确研究实体。
-
组织对象:分析对象间的关联关系,将共性对象抽象为类,简化关联模型。
-
描述对象间的相互作用:梳理对象间的依赖、包含等关系(如对象的组成关系)。
-
确定对象的操作:定义对象可执行的行为方法。
-
定义对象的内部信息:明确对象的属性与状态。
-
-
举例:在线书店系统
用户可以在线浏览图书、将图书加入购物车、下单购买。

三、面向对象设计(OOD)
-
核心目标:将 OOA 的分析模型转化为可实现的设计模型,定义系统的实现蓝图。
-
核心活动(固定顺序): 识别类及对象 → 定义属性 → 定义服务(方法) → 识别关系 → 识别包
-
举例:在线书店系统

-
面向对象设计的核心原则
-
单一职责原则:一个类只负责一个职责。
-
开放-封闭原则:对扩展开放,对修改封闭。
-
里氏替换原则:子类型必须能替换父类型。
-
依赖倒置原则:依赖抽象,不依赖具体实现。
-
接口分离原则:最小化接口依赖。
-
迪米特法则(最少知识):减少类之间的交互。
-
组合重用原则:优先使用组合而非继承。
包的设计原则:
重用发布等价原则:重用粒度 = 发布粒度
共同封闭原则:包内类应对同一类变化共同封闭
共同重用原则:重用包中一类即重用所有类
无环依赖原则:包依赖图中不允许有环
稳定依赖原则:依赖方向应朝向稳定
稳定抽象原则:抽象程度与稳定程度一致
四、面向对象测试

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)