软件开发7大原则(这你不知道,Java白学了)

本文介绍了面向对象设计的六大基本原则:里氏替换原则、开放封闭原则、单一职责原则、接口隔离原则、依赖倒置原则及组合复用原则。通过遵循这些原则,可以提高软件系统的可维护性、可扩展性和灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.里氏替换原则-LSP: The Liskov substitution principle 

 子类必须能够替换基类(重要的) 

 子类不加额外约束 尽量继承抽象类接口(重要的)

a) LSP关注的是怎样良好的使用继承. 

b) 必须要清楚是使用一个Method还是要扩展它,但是绝对不是改变它。 

c) .LSP清晰的指出,OOD的IS-A关系是就行为方式而言,行为方式是可以进行合理假设的,是客户程序所依赖的。

d) LSP让我们得出一个重要的结论:一个模型如果孤立的看,并不具有真正意义的有效性。模型的有效性只能通过它的客户程序来表现。必须根 据设计的使用者做出的合理假设来审视它。而假设是难以预测的,直到设计臭味出现的时候才处理它们。 

e) 对于LSP的违反也潜在的违反了OCP 2.开放封闭原则-OCP(开闭原则,Open-Closed Principle) 对扩展开放,对更改封闭 使得应用程序具有更多的可维护性,可重用性以及可健壮性 想想:其实里氏替换原则也是开放封闭原则的一个基础 一个软件的实体应当对扩展开放,对修改关闭。我的理解是,对于一个已有的软件,如果需要扩展,应当在不需修改已有代码的基础上进行

3.单一职责原则-SRP(The single responsibility principle )

系统中的每一个对象都应该只有一个单独的职责,而所有对象所关注的就是自身职责的完成。SRP 让这个系统更容易管理维护,因为不是所有的问题都搅在一起。 如果一个类承担的职责过多,就等于把这些职责耦合在了一起。一个职责的变化就可能削弱或者抑制这个类其它职责的能力。这种设计会导致脆弱的设计。当变化发生的时候,设计会遭到意想不到的破坏。 

4.接口隔离原则 

在设计时采用多个与特定客户类有关的接口比采用一个通用的接口要好不应该强迫客户程序依赖它们不需要的使用的方法。(客户端不应该依赖于自己不用的方法。)接口不是高内聚的,一个接口可以分成N组方法,那么这个接口就需要使用ISP处理一下。 接口的划分是由使用它的客户程序决定的,客户程序是分离的接口也应该是分离的。 一个接口中包含太多行为时候,导致它们的客户程序之间产生不正常的依赖关系,我们要做的就是分离接口,实现解耦。 应用了ISP之后,客户程序看到的是多个内聚的接口。 

5.依赖倒置原则-DIP(Dependence Inversion Principle)

依赖关系应该是尽量依赖接口(或抽象类),而不是依赖于具体类 高层不依赖低层,都依赖于抽象 针对接口编程,不要针对实现编程 我的理解是,对于不同层次的编程, 高层次暴露给低层次的应当只是接口,而不是它的具体类。 这里的倒置不仅仅是依赖关系的倒置也是接口所有权的倒置。应用了DIP我们会发现往往是客户拥有抽象的接口,而服务者从这些抽象接口派生。

6.组合(聚合)复用原则-DRY : Don't repeat yourself Principle

通过抽取公共部分放置在一个地方避免代码重复.尽量避免使用继承来复用代码多用组合,少用继承。

原因: 

 a、继承会使类无限膨大,可能会使类变得臃肿。 

 b、子类可能会继承父类中那些无用甚至有害的方法。

 c、组合比继承更灵活,可以实现在执行中动态改变对象的功能。

7.迪米特法则(Law of Demeter) 

对象间少通信,不要跟陌生人说话不会跟面向接口编程冲突众所周知类(或模块)之间的通信越少,耦合度就越低,从而更有利于我们对软件的宏观理。

<think>嗯,用户想了解全栈软件开发习路径,尤其是针对新手的路线图。首先,我需要明确全栈开发涵盖哪些方面,通常包括前端、后端、数据库、版本控制和部署等。用户可能刚入门,所以习路线需要从基础开始,逐步深入。 根据引用内容,用户提到了Linux平台对C/C++后台开发的重要性,但全栈可能更偏向于Web开发。引用[2]推荐了Udemy的Web开发课程,这可能适合前端部分。而引用[3]提到Java全栈需要软件设计、架构等技能,所以后端部分可能需要Java或Node.js等技术。 接下来,我需要分阶段规划习路线。第一阶段是编程基础,比如HTML、CSS、JavaScript,这些是前端的基础。然后习前端框架如React或Vue,接着是后端语言如Node.js或Python,数据库如MySQL或MongoDB,版本控制工具Git,以及部署和DevOps的基础。同时,项目实践很重要,可以巩固知识。 还要考虑用户可能对习资源的需求,比如推荐书籍或在线课程。例如引用[2]提到的Udemy课程,或者引用[3]中的软件设计知识。需要将这些资源整合到路线图中,确保用户有可靠的习材料。 此外,用户可能希望了解每个阶段的习重点和常见误区,比如先掌握基础再框架,避免跳跃式习导致基础牢。同时,全栈开发需要前后端的协调,强调项目实战的重要性,所以路线图中应包括项目练习。 最后,生成相关问题,帮助用户深入理解各个部分,比如前端框架的选择、后端技术对比、数据库优化等。这些相关问题能引导用户进一步探索,满足他们的深层需求。</think>### 全栈软件开发习路线图(新手向) #### 一、编程基础阶段(3-6个月) 1. **前端基础** - 掌握HTML/CSS语法与语义化标签 - JavaScript核心语法(ES6+特性) - 实践响应式布局与Flexbox/Grid系统 - 推荐资源:《JavaScript高级程序设计》[^2] 2. **后端入门** - 选择一门服务端语言: - Python(Django/Flask) - JavaScript(Node.js) - Java(Spring Boot)[^3] - 理解HTTP协议与RESTful API设计 ```javascript // Node.js简单HTTP服务示例 const http = require('http'); const server = http.createServer((req, res) => { res.statusCode = 200; res.end('Hello World'); }); server.listen(3000); ``` #### 二、技术进阶阶段(6-12个月) 3. **前端框架** - React/Vue/Angular三选一 - 习状态管理(Redux/Vuex) - 掌握Webpack/Vite构建工具 4. **数据库技术** - 关系型数据库: $$ \text{MySQL} \Rightarrow \text{索引优化} \Rightarrow \text{事务隔离级别} $$ - 非关系型数据库: MongoDB文档模型 Redis缓存机制 5. **系统设计** - 掌握设计模式与架构原则[^3] - 习微服务与容器化(Docker) - 理解认证授权(OAuth/JWT) #### 三、工程化实践阶段 6. **开发工具链** - Git工作流与GitHub协作 - CI/CD流水线配置 - 单元测试与E2E测试框架 7. **云原生技术** - AWS/Azure/GCP基础服务 - Kubernetes集群管理 - Serverless架构实践 #### 四、习路径图示 ``` 前端技术栈 后端技术栈 基础设施 │ │ │ ▼ ▼ ▼ HTML/CSS Python/Java Linux基础 │ │ │ JavaScript Node.js Docker │ │ │ React/Vue Spring Boot Kubernetes │ │ │ 状态管理 微服务架构 云平台部署 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值