面向对象分析设计(OOAD)是软件开发中的一个核心概念,它通过将现实世界的问题域映射到计算机模型中来帮助解决实际问题。掌握面向对象的方法论,能够使软件系统更加模块化、可维护和可扩展。本文将解析50个经典例题,帮助读者深入理解面向对象分析设计的过程。
1. 银行账户系统
问题描述:设计一个银行账户系统,包括账户、储蓄账户和支票账户。
分析:
- 类:账户(Account)、储蓄账户(SavingsAccount)、支票账户(CheckingAccount)
- 属性:账户号、余额
- 方法:存款(deposit)、取款(withdraw)、查询余额(getBalance)
设计:
public class Account {
protected String accountNumber;
protected double balance;
public Account(String accountNumber) {
this.accountNumber = accountNumber;
this.balance = 0.0;
}
public void deposit(double amount) {
balance += amount;
}
public void withdraw(double amount) {
if (balance >= amount) {
balance -= amount;
}
}
public double getBalance() {
return balance;
}
}
public class SavingsAccount extends Account {
public SavingsAccount(String accountNumber) {
super(accountNumber);
}
// SavingsAccount-specific methods
}
public class CheckingAccount extends Account {
public CheckingAccount(String accountNumber) {
super(accountNumber);
}
// CheckingAccount-specific methods
}
2. 交通信号灯
问题描述:设计一个交通信号灯系统,包括红灯、黄灯和绿灯。
分析:
- 类:信号灯(TrafficLight)
- 属性:灯色(RED, YELLOW, GREEN)
- 方法:改变灯色(changeLight)
设计:
public enum LightColor {
RED, YELLOW, GREEN
}
public class TrafficLight {
private LightColor lightColor;
public TrafficLight() {
lightColor = LightColor.RED;
}
public void changeLight() {
switch (lightColor) {
case RED:
lightColor = LightColor.YELLOW;
break;
case YELLOW:
lightColor = LightColor.GREEN;
break;
case GREEN:
lightColor = LightColor.RED;
break;
}
}
}
3. 图书管理系统
问题描述:设计一个图书管理系统,包括图书、读者和借阅记录。
分析:
- 类:图书(Book)、读者(Reader)、借阅记录(BorrowRecord)
- 属性:书名、作者、读者姓名、借阅日期、归还日期
- 方法:借阅图书、归还图书
设计:
public class Book {
private String title;
private String author;
public Book(String title, String author) {
this.title = title;
this.author = author;
}
// Getters and setters
}
public class Reader {
private String name;
public Reader(String name) {
this.name = name;
}
// Getters and setters
}
public class BorrowRecord {
private Book book;
private Reader reader;
private Date borrowDate;
private Date returnDate;
public BorrowRecord(Book book, Reader reader) {
this.book = book;
this.reader = reader;
this.borrowDate = new Date();
}
// Getters and setters
}
4. 学生管理系统
问题描述:设计一个学生管理系统,包括学生、课程和成绩。
分析:
- 类:学生(Student)、课程(Course)、成绩(Grade)
- 属性:姓名、学号、课程名称、分数
- 方法:注册课程、添加成绩
设计:
public class Student {
private String name;
private String studentId;
public Student(String name, String studentId) {
this.name = name;
this.studentId = studentId;
}
// Getters and setters
}
public class Course {
private String name;
public Course(String name) {
this.name = name;
}
// Getters and setters
}
public class Grade {
private Student student;
private Course course;
private double score;
public Grade(Student student, Course course, double score) {
this.student = student;
this.course = course;
this.score = score;
}
// Getters and setters
}
5. 飞机管理系统
问题描述:设计一个飞机管理系统,包括飞机、飞行员和航班。
分析:
- 类:飞机(Airplane)、飞行员(Pilot)、航班(Flight)
- 属性:型号、注册号、姓名、出发地、目的地
- 方法:起飞、降落
设计:
public class Airplane {
private String model;
private String registrationNumber;
public Airplane(String model, String registrationNumber) {
this.model = model;
this.registrationNumber = registrationNumber;
}
// Getters and setters
}
public class Pilot {
private String name;
public Pilot(String name) {
this.name = name;
}
// Getters and setters
}
public class Flight {
private Airplane airplane;
private Pilot pilot;
private String departure;
private String destination;
public Flight(Airplane airplane, Pilot pilot, String departure, String destination) {
this.airplane = airplane;
this.pilot = pilot;
this.departure = departure;
this.destination = destination;
}
// Getters and setters
}
6. 购物车系统
问题描述:设计一个购物车系统,包括商品、购物车和订单。
分析:
- 类:商品(Product)、购物车(Cart)、订单(Order)
- 属性:名称、价格、数量、总价
- 方法:添加商品、结算
设计:
public class Product {
private String name;
private double price;
public Product(String name, double price) {
this.name = name;
this.price = price;
}
// Getters and setters
}
public class Cart {
private List<Product> products;
public Cart() {
this.products = new ArrayList<>();
}
public void addProduct(Product product) {
products.add(product);
}
public double getTotalPrice() {
return products.stream().mapToDouble(Product::getPrice).sum();
}
}
public class Order {
private List<Product> products;
private double totalPrice;
public Order(Cart cart) {
this.products = cart.getProducts();
this.totalPrice = cart.getTotalPrice();
}
// Getters and setters
}
7. 邮件系统
问题描述:设计一个邮件系统,包括邮件、收件人和发件人。
分析:
- 类:邮件(Email)、收件人(Recipient)、发件人(Sender)
- 属性:主题、内容、发送时间、收件人姓名、发件人姓名
- 方法:发送邮件、接收邮件
设计:
public class Email {
private String subject;
private String content;
private Date sentDate;
private Recipient recipient;
private Sender sender;
public Email(String subject, String content, Recipient recipient, Sender sender) {
this.subject = subject;
this.content = content;
this.sentDate = new Date();
this.recipient = recipient;
this.sender = sender;
}
// Getters and setters
}
public class Recipient {
private String name;
public Recipient(String name) {
this.name = name;
}
// Getters and setters
}
public class Sender {
private String name;
public Sender(String name) {
this.name = name;
}
// Getters and setters
}
8. 通讯录系统
问题描述:设计一个通讯录系统,包括联系人、电话号码和电子邮件地址。
分析:
- 类:联系人(Contact)、电话号码(PhoneNumber)、电子邮件地址(EmailAddress)
- 属性:姓名、电话号码、电子邮件地址
- 方法:添加联系人、删除联系人
设计:
public class Contact {
private String name;
private List<PhoneNumber> phoneNumbers;
private List<EmailAddress> emailAddresses;
public Contact(String name) {
this.name = name;
this.phoneNumbers = new ArrayList<>();
this.emailAddresses = new ArrayList<>();
}
public void addPhoneNumber(PhoneNumber phoneNumber) {
phoneNumbers.add(phoneNumber);
}
public void addEmailAddress(EmailAddress emailAddress) {
emailAddresses.add(emailAddress);
}
// Getters and setters
}
public class PhoneNumber {
private String number;
public PhoneNumber(String number) {
this.number = number;
}
// Getters and setters
}
public class EmailAddress {
private String address;
public EmailAddress(String address) {
this.address = address;
}
// Getters and setters
}
9. 仓库管理系统
问题描述:设计一个仓库管理系统,包括商品、仓库和库存。
分析:
- 类:商品(Product)、仓库(Warehouse)、库存(Stock)
- 属性:名称、型号、数量
- 方法:入库、出库、查询库存
设计:
public class Product {
private String name;
private String model;
public Product(String name, String model) {
this.name = name;
this.model = model;
}
// Getters and setters
}
public class Warehouse {
private List<Product> products;
public Warehouse() {
this.products = new ArrayList<>();
}
public void addProduct(Product product) {
products.add(product);
}
public void removeProduct(Product product) {
products.remove(product);
}
public Product findProduct(String name) {
for (Product p : products) {
if (p.getName().equals(name)) {
return p;
}
}
return null;
}
}
public class Stock {
private int quantity;
public Stock(int quantity) {
this.quantity = quantity;
}
// Getters and setters
}
10. 客户关系管理系统
问题描述:设计一个客户关系管理系统,包括客户、订单和销售记录。
分析:
- 类:客户(Customer)、订单(Order)、销售记录(SalesRecord)
- 属性:姓名、地址、订单号、订单日期、销售金额
- 方法:添加客户、创建订单、记录销售
设计:
public class Customer {
private String name;
private String address;
public Customer(String name, String address) {
this.name = name;
this.address = address;
}
// Getters and setters
}
public class Order {
private String orderNumber;
private Date orderDate;
private double salesAmount;
public Order(String orderNumber, Date orderDate, double salesAmount) {
this.orderNumber = orderNumber;
this.orderDate = orderDate;
this.salesAmount = salesAmount;
}
// Getters and setters
}
public class SalesRecord {
private Customer customer;
private Order order;
public SalesRecord(Customer customer, Order order) {
this.customer = customer;
this.order = order;
}
// Getters and setters
}
11. 人力资源管理
问题描述:设计一个人力资源管理系
