模块化与命名空间

学习目标

通过本集的学习,你将能够:

  • 理解模块化的好处
  • 掌握命名空间的使用
  • 理解模块依赖
  • 学会可见性控制

1. 模块化概述

1.1 什么是模块化?

模块化将程序分成独立的模块,每个模块有清晰的职责。

模块化的好处:
- 代码组织
- 可重用性
- 可维护性
- 并行开发
- 减少命名冲突

1.2 模块示例

Python 模块:
# math_utils.py
def add(a, b):
    return a + b

def multiply(a, b):
    return a * b

# main.py
import math_utils
print(math_utils.add(1, 2))

2. 命名空间

2.1 什么是命名空间?

命名空间是一个容器,用于组织名称,避免冲突。

命名冲突问题:
// 文件1
int x = 10;

// 文件2
int x = 20;  // 冲突!

命名空间解决:
namespace ns1 {
    int x = 10;
}

namespace ns2 {
    int x = 20;
}

ns1::x  // 10
ns2::x  // 20

2.2 Python 命名空间

Python 命名空间:
- 局部命名空间(函数内)
- 全局命名空间(模块内)
- 内置命名空间(Python 内置)

搜索顺序:局部 → 全局 → 内置

3. 可见性控制

3.1 公有 vs 私有

Python 惯例:
def public_func():
    pass

def _private_func():  // 下划线表示私有
    pass

class MyClass:
    def public_method(self):
        pass

    def _private_method(self):
        pass

3.2 模块导出

JavaScript ES6:
// module.js
export const x = 42;
export function f() { ... }

// main.js
import { x, f } from './module.js';

4. 模块依赖

4.1 依赖管理

依赖关系:
A → B → C
(A 依赖 B,B 依赖 C)

循环依赖问题:
A → B → A(避免!)

5. 实用案例

5.1 案例:Python 包结构

项目结构:
my_project/
    __init__.py
    math/
        __init__.py
        arithmetic.py
        geometry.py
    io/
        __init__.py
        file.py
        network.py

使用:
from my_project.math.arithmetic import add
from my_project.io.file import read_file

6. 自测问题

  1. 模块化的好处是什么?
  2. 什么是命名空间?
  3. 如何控制可见性?
  4. 什么是模块依赖?
  5. 为什么要避免循环依赖?

7. 下集预告

下一集我们将学习并发与并行!

参考资料

  • 《程序设计语言:概念与构造》
« 上一篇 异常处理机制 下一篇 » 并发与并行