给自己一个目标,然后坚持一段时间,总会有收获和感悟!
学软件或计算机专业的同学应该都会接触到一门课程《软件工程》,七大设计原则属于软件工程中的重要知识点。
目录
- 一、软件工程
- 1.1、提供指导和规范
- 1.2、确保软件质量
- 1.3、提高开发效率和生产力
- 1.4、降低软件开发风险
- 1.5、支持可维护和可扩展性
- 二、七大原则
- 2.1、单一职责原则
- 2.2、开放封闭原则
- 2.3、里式替换原则
- 2.4、依赖倒转原则
- 2.5、接口隔离原则
- 2.6、迪米特法则
- 2.7、合成复用原则
- 三、代码例子
- 3.1、单一职责原则例子
- 3.2、开放封闭原则例子
- 3.3、里式替换原则例子
一、软件工程
软件工程是一门关注构建高质量软件的学科,它涉及了软件开发的全过程,从需求分析、设计、编码、测试到部署和维护。软件工程的目标是通过系统性的方法和工具来开发和维护可靠、高效、可维护和安全的软件。
- 软件工程的作用包括以下几个方面
1.1、提供指导和规范
软件工程提供了一系列的准则、方法和最佳实践,以指导开发团队如何有效地组织和管理软件项目。它帮助开发者遵循一套规范和标准,以确保软件开发过程的质量和可控性。
1.2、确保软件质量
通过使用软件工程方法和技术,开发团队可以在整个软件开发生命周期中进行严格的质量控制。这包括对需求的准确定义、系统设计的完整性和正确性、代码的可读性和可维护性,以及全面的软件测试和验证。
1.3、提高开发效率和生产力
软件工程通过引入工程化的方法和工具,提供了一系列的自动化和协作机制,可以大大提高开发效率和生产力。例如,使用版本控制系统可以更好地管理代码的变更,使用集成开发环境可以提供更好的编码和调试工具。
1.4、降低软件开发风险
软件工程注重风险管理和控制,帮助开发团队在项目早期识别和处理潜在的问题和风险,从而降低项目失败的风险。通过合理的项目计划、风险评估和迭代开发等方法,可以更好地管理和减少开发过程中的不确定性。
1.5、支持可维护和可扩展性
软件工程关注软件的长期维护和演化,帮助开发团队构建易于维护和灵活扩展的软件系统。通过合理的架构设计、模块化和抽象化,软件工程可以提高软件系统的可维护性和可扩展性。
总之,软件工程在软件开发过程中起到指导、规范、管理和控制的作用,以确保开发高质量的软件系统。
它帮助开发者和团队更好地组织、规划和执行软件项目,从而提高开发效率、减少风险,并满足用户需求。
二、七大原则
在软件设计中,有七个常用的设计原则,也被称为SOLID原则
2.1、单一职责原则
单一职责原则(Single Responsibility Principle,SRP),一个类应该只有一个引起它变化的原因。简单来说,一个类或模块应该只负责一项任务或功能。例如,一个负责处理用户登录的类不应该承担其他与用户无关的功能。
2.2、开放封闭原则
开放封闭原则(Open-Closed Principle,OCP),软件实体(类、模块、函数等)应该是可扩展的,但对修改是封闭的。这意味着我们应该通过扩展现有实体,而不是修改它们来实现新的功能或行为。例如,通过使用抽象类或接口,我们可以定义一个通用的日志记录接口,然后通过实现该接口来添加新的日志记录器。
2.3、里式替换原则
里式替换原则(Liskov Substitution Principle,LSP),子类应该能够替换父类并且不影响程序的逻辑正确性。简单来说,子类应该能够以父类的身份无缝使用,并且不引起错误或异常。例如,如果有一个父类定义了一个返回数字的方法,子类应该能够返回同样类型的数字,而不是返回字符串或其他类型。
2.4、依赖倒转原则
依赖倒转原则(Dependency Inversion Principle,DIP),高层模块不应该依赖于低层模块的具体实现,而是应该依赖于抽象接口或类。简单来说,代码应该依赖于接口或抽象类,而不是具体的实现类。例如,一个控制器类应该依赖于定义好的接口而不是具体的服务类。
2.5、接口隔离原则
接口隔离原则(Interface Segregation Principle,ISP),客户端不应该依赖于它不需要的接口。简单来说,一个类不应该强制依赖于它不使用的接口方法。例如,如果有一个需要进行文件操作的类,不应该强制实现与网络通信相关的方法。
2.6、迪米特法则
迪米特法则(Law of Demeter,LoD,最少知识原则),一个对象应该与其他对象之间保持最少的了解。简单来说,一个类或对象应该尽可能少地知道其他类或对象的细节。例如,如果一个类需要使用另一个类的功能,应该通过接口或抽象的方式进行交互,而不是直接调用该类的方法。
2.7、合成复用原则
合成复用原则(Composition/Aggregation Reuse Principle,CARP),优先使用对象组合和聚合,而不是继承来达到代码复用的目的。简单来说,应该通过组合多个类的方式来实现代码复用,而不是通过继承。例如,使用组合关系将多个小的功能类组合成一个大的功能类,而不是通过继承来扩展功能。
三、代码例子
3.1、单一职责原则例子
// 单一职责原则例子
class UserService {
public void register(String username, String password) {
// 用户注册逻辑
}
}
class EmailService {
public void sendEmail(String recipient, String content) {
// 发送邮件逻辑
}
}
3.2、开放封闭原则例子
// 开放封闭原则例子
interface Logger {
void log(String message);
}
class ConsoleLogger implements Logger {
public void log(String message) {
System.out.println(message);
}
}
class FileLogger implements Logger {
public void log(String message) {
// 将日志写入文件的逻辑
}
}
3.3、里式替换原则例子
// 里式替换原则例子
class Shape {
public double getArea() {
return 0;
}
}
class Rectangle extends Shape {
private double width;
private double height;
public void setWidth(double width) {
this.width = width;
}
public void setHeight(double height) {
this.height = height;
}
public double getArea() {
return width * height;
}
}
过上述例子,可以更好地理解七大设计原则在实际代码中的应用。这些原则有助于提高代码的可维护性、扩展性和重用性。