当前位置: 首页 > news >正文

胜芳哪里做网站公司seo

胜芳哪里做网站,公司seo,asp的网站空间,安徽网站建设论坛目录 前言 1.单一责任原则(SRP) 2.开发封闭原则(OCP) 3.里氏替换原则(LSP) 4.依赖倒置原则(DIP) 5.接口分离原则(ISP) 6.共同封闭原则(CCP&#xff09…

目录

前言
1.单一责任原则(SRP)
2.开发封闭原则(OCP)
3.里氏替换原则(LSP)
4.依赖倒置原则(DIP)
5.接口分离原则(ISP)
6.共同封闭原则(CCP)
7.共同重用原则(CRP)
1.无环依赖原则(ADP)
总结

前言

在当今的软件开发领域,面向对象编程(OOP)已经成为了主流。良好的设计原则对于编写出高质量、易于维护的代码至关重要。在本文中,我们将详细介绍面向对象软件设计的八大原则,并通过实际案例来解释每一个原则。无论您是初学者还是有一定经验的开发者,理解这些原则都将对您的编程技能提升大有裨益。


1.单一责任原则(SRP)

概述:一个类应该只有一个引起变化的原因。例如,一个处理用户账户的类应该只负责用户账户相关的功能,不应该同时处理订单处理或数据库连接等其他功能。

代码案例:

// 不好的例子:UserAccount类同时处理了账户信息和数据库操作
class UserAccount {public void createUser(String username, String password) {// 处理用户账户逻辑}public void saveToDatabase() {// 数据库操作逻辑}
}// 好的例子:将数据库操作分离到另一个类
class UserAccount {public void createUser(String username, String password) {// 只处理用户账户逻辑}
}
class Database {public void saveToDatabase(UserAccount user) {// 数据库操作逻辑}
}

具体的方法和建议:

  • 在设计类时,确保每个类只负责一个功能或职责。
  • 通过类的职责来命名类,使得类的名称能够清晰地表达其功能。
  • 定期回顾代码,检查是否有类承担了过多的责任,如果有,考虑将其拆分为多个类。

2.开发封闭原则(OCP)

概述:软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。这意味着在不修改原有代码的基础上增加新的功能。

代码案例:

// 不好的例子:每次添加新形状都需要修改ShapeArea类
class ShapeArea {public double calculateArea(Rectangle r) { /* ... */ }public double calculateArea(Circle c) { /* ... */ }// 如果添加新的形状,需要修改这个类
}// 好的例子:通过继承实现扩展
abstract class Shape {public abstract double calculateArea();
}
class Rectangle extends Shape { /* ... */ }
class Circle extends Shape { /* ... */ }
// 添加新形状时,只需扩展Shape类

具体的方法和建议:

  • 使用接口和抽象类来定义公共的行为,使得子类可以扩展这些行为而不是修改。
  • 在编写代码时,考虑未来可能的扩展点,并设计成可以插入新的模块或功能。
  • 避免使用硬编码的值或条件,而是使用配置文件或策略模式来切换行为。

3.里氏替换原则(LSP)

概述:子类必须能够替换它们的基类。这意味着,在任何使用基类的地方,都可以使用子类对象,而不会影响到程序的正确性。

代码案例:

// 不好的例子:Square不是长方形的特殊情况,替换会导致问题
class Rectangle {public void setWidth(int width) { /* ... */ }public void setHeight(int height) { /* ... */ }
}
class Square extends Rectangle {public void setWidth(int width) {super.setWidth(width);super.setHeight(width); // 强制正方形}public void setHeight(int height) {super.setWidth(height);super.setHeight(height); // 强制正方形}
}
// 使用Rectangle的地方替换为Square可能会出现问题// 好的例子:正方形应该有自己的接口
interface Quadrilateral {void setWidth(int width);void setHeight(int height);
}
class Rectangle implements Quadrilateral { /* ... */ }
class Square implements Quadrilateral { /* ... */ }

具体的方法和建议:

  • 确保子类能够替换父类而不影响程序的正确性。
  • 避免在子类中引入新的约束或改变父类的行为。
  • 使用多态来调用子类的方法,这样可以确保子类对象可以被父类引用所使用。

4.依赖倒置原则(DIP)

概述:高层模块不应该依赖低层模块,它们都应该依赖于抽象。抽象不应该依赖于细节,细节应该依赖于抽象。

代码案例:

// 不好的例子:高层模块依赖于具体实现
class EmailService {public void sendEmail(String message) { /* ... */ }
}
class Notification {private EmailService emailService = new EmailService();public void sendNotification(String message) {emailService.sendEmail(message);}
}// 好的例子:高层模块依赖于抽象
interface INotificationService {void sendNotification(String message);
}
class EmailService implements INotificationService {public void sendNotification(String message) { /* ... */ }
}
class Notification {private INotificationService notificationService;public Notification(INotificationService service) {notificationService = service;}public void sendNotification(String message) {notificationService.sendNotification(message);}
}

具体的方法和建议:

  • 高层模块(业务逻辑)不应该依赖于低层模块(数据访问层、基础设施),而是依赖于抽象。
  • 使用依赖注入(DI)来提供抽象的依赖项,而不是在类内部创建具体的依赖项。
  • 定义好接口和抽象类,并通过构造函数、方法参数或属性来传递依赖。

5.接口分离原则(ISP)

概述:客户端不应该被迫依赖于他们不用的方法。接口应该最小化,而不是包含所有可能的方法。

代码案例:

// 不好的例子:一个接口包含太多不相关的方法
interface IAnimal {void eat();void fly(); // 并非所有动物都会飞void swim(); // 并非所有动物都会游泳
}
class Bird implements IAnimal { /* ... */ }
class Fish implements IAnimal { /* ... */ }// 好的例子:将接口拆分为多个专门的接口
interface IFlyable {void fly();
}
interface ISwimmable {void swim();
}
interface IAnimal {void eat();
}
class Bird implements IAnimal, IFlyable { /* ... */ }
class Fish implements IAnimal, IS

具体的方法和建议:

  • 避免创建大而全的接口,而是应该根据功能将接口拆分为多个小的、专门的接口。
  • 客户端(使用接口的类)只需要依赖于它们实际使用的方法。
  • 使用接口组合而不是继承来扩展接口的功能。

6.共同封闭原则(CCP)

概述:共同封闭原则指出,一个包中的所有类应该对同一类性质的变更做出反应,即一个变更的原因应该只影响一个包中的所有类,而不是整个系统中的类。

代码案例:

// 不好的案例:一个包包含了多个不相关的功能
package com.example.mixedbag;
class UserAccount {// ...
}
class Order {// ...
}
class Product {// ...
}// 好的案例:按照功能将类分布在不同的包中
package com.example.user;
class UserAccount {// ...
}package com.example.order;
class Order {// ...
}package com.example.product;
class Product {// ...
}

具体的方法和建议:

  • 将相关的类和接口放在同一个模块或包中,这样当业务规则变化时,只需要修改一个模块或包。
  • 设计时考虑类的变化频率和原因,将可能一起变化的类放在一起。

7.共同重用原则(CRP)

概述:一个项目中有一个工具包,包含了各种工具类,比如日期处理、字符串处理和数学计算。如果一个开发者只重用了日期处理类,那么他可能不需要字符串处理和数学计算类。这违反了共同重用原则。

代码案例:

// 不好的案例:工具包中包含了不相关的工具类
package com.example.utils;
class DateUtils {// ...
}
class StringUtils {// ...
}
class MathUtils {// ...
}// 好的案例:按照功能将工具类分布在不同的包中
package com.example.date;
class DateUtils {// ...
}package com.example.string;
class StringUtils {// ...
}package com.example.math;
class MathUtils {// ...
}

具体的方法和建议:

  • 如果一个类被重用,那么与它一起被频繁重用的其他类也应该放在同一个包中。
  • 设计包和模块时,考虑它们的重用性,避免将不相关的类放在一起。

1.无环依赖原则(ADP)

概述:无环依赖原则指出,在包的依赖关系图中不应该存在环,即包之间的依赖关系应该是单向的,避免循环依赖。

代码案例:

// 不好的案例:数据访问包和业务逻辑包之间存在循环依赖
package com.example.data;
import com.example.business.BusinessLogic;class DataAccess {private BusinessLogic businessLogic;// ...
}package com.example.business;
import com.example.data.DataAccess;class BusinessLogic {private DataAccess dataAccess;// ...
}// 好的案例:业务逻辑包依赖于数据访问包,但数据访问包不依赖于业务逻辑包
package com.example.data;
class DataAccess {// ...
}package com.example.business;
import com.example.data.DataAccess;class BusinessLogic {private DataAccess dataAccess;// ...
}

具体的方法和建议:

  • 确保包之间的依赖关系是单向的,并且没有循环依赖。
  • 使用依赖关系图来可视化包之间的依赖,并确保图中没有环。

总结

通过本文的介绍,我们深入理解了面向对象软件设计的八大原则:单一责任原则、开发封闭原则、里氏替换原则、依赖倒置原则、接口分离原则、共同封闭原则、共同重用原则和无环依赖原则。这些原则为我们提供了一种思考问题和解决问题的方法论,帮助我们编写出更加健壮、灵活和可维护的代码。在实际的软件开发过程中,我们应该时刻牢记这些原则,并努力将它们应用到实践中。只有这样,我们才能更好地应对复杂的业务需求,不断提高我们的开发效率和软件质量。

我最近在备考软考中级,但是发现缺少实际经验,很难理解,大家可以分享自己的学习经验吗,在评论区~

http://www.15wanjia.com/news/5225.html

相关文章:

  • 世界上做的最好的前端网站官方网站怎么注册
  • 濮阳做网站多少钱谷歌seo建站
  • 南通给公司做网站的今天疫情最新消息
  • 有专门做网站的公司吗推广公司属于什么公司
  • wordpress 安装包金融网站推广圳seo公司
  • 党建网站怎么做百度推广靠谱吗
  • 织梦移动网站模板郑州网络推广哪家口碑好
  • 重庆蜡像制作优化公司
  • 韦恩图在线制作网站seo快速上排名
  • 公司网站建设工作总结营销推广技巧
  • c mvc 大型网站开发公司怎么建立自己的网站
  • 虾皮网站有的做吗有什么引流客源的软件
  • 计算机编程是做网站如何推广一个新的app
  • 怎样做后端数据传输前端的网站海外短视频跨境电商平台是真的吗
  • 这几年做哪些网站致富黑帽seo什么意思
  • 网站怎么做自适应权威发布
  • 做网站营业范围石家庄网络推广平台
  • 宁波网站建设专业定制综合搜索引擎
  • wordpress5.0启多站点腾讯企业邮箱登录入口
  • 网站推广方法包括哪些拉新十大推广app平台
  • 网站建设公司简介模板下载沈阳关键词优化价格
  • 上海大型网站开发公司百度一下主页官网
  • wordpress 发送邮件失败seo综合查询是啥意思
  • 三年片免费大全国语seo网站页面优化包含
  • 滁州网站建设bpbqq北京疫情最新新闻
  • 长长沙网站制作会计培训班需要学多长时间
  • 企业网站建设项目计划书电脑全自动挂机赚钱
  • 广州市建设工程安全监督站网站网站建设规划要点详解
  • 温州集团网站建设百度关键词排名查询工具
  • 网站自适应 常用尺寸口碑营销例子