软件系统的复杂性和面向对象编程
你开发的软件系统复杂吗?有了数据库,有了网络组件,开发框架,好像也很容易开发出一个软件。这样看来,软件也并不复杂。但是为什么我们的开发速度那么慢呢?
为什么变得简单了?在于我们对系统进行了拆分,像搭积木一样。而具体到软件开发中,就是面向对象编程。好的软件系统向汽车结构,复杂的软件系统像人体结构。
软件想要实现更多的功能,必然会导致复杂度上升。虽然我们都力求化繁为简,但是改变不了大趋势。
公司外包给供应商的项目,需要根据需求改变,但是在前期追求速度,代码封装太很,并且开发环境也不一样,如果做较大更改,难度很大,就像你无法理解其他人一样。
但是代码确实控制行为,有什么代码,就有什么行为。
但是要改那么多代码,怎么入手,真的很难办。现在供应商都是卖服务,就是将软件代码和硬件结合,以提供服务的方式卖给你,这样你去改代码,更加难了。
设计模式很难定义,通俗来说,就像是写作文的套路。程序员在程序设计总结了很多开发经验,就形成了设计模式。其实在有了框架之后,不会去开发完整的应用,设计模式的重要性降低了很多。
基本思想:1.将变化的和不变的部分分开,在修改和维护时只需要改动变化的部分。
具体方式:
1.类继承是oop中的三大特点之一,可以实现代码复用,并且代码层次更清晰,但是继承会使类的耦合度变高,简单来说,一个类的改动可能会影响其他类,使代码的修改和维护变得困难。灵活性可以使用接口设计,通过继承接口,实现不同的行为,可以看到,代码的复用性降低了,于是又引入了在接口中的适配器。实现代码复用的其他方式为对象组合,将功能的实现委托(delegate)给其他对象。
2.多态:在向函数传递对象时,对象类型选择范围更广。不是针对具体类编程,扩展性更强。
3.很多现实生活中的行为都可以抽象成方法,当然,此时我们只是抽象思考,并不关心它们的具体实现方式。比如观察这模式。现实生活中的订阅报纸很像。那么事件类是怎么注册观察者的呢?其实很多gui的组件在处理用户交互的时候就用到了这种设计模式。这里还有个问题就是,谁主动订阅的?Observer持有Subject的对象引用,还是Subject对象持有Oberver对象的应用?在observer和observable中又存在push和pull的区别。就像报社发出了有新报纸的信号,报社推送给用户就是push,用户自己取就是pull,以该例子理解起来就不难了。
4.装饰器模式,通过组合对象,调用组合对象的代码,从而实现代码的复用。
5.工厂模式:对new进行封装,根据需要(参数)动态生成所需对象。
6.单例模式:通过类方法调用私有构造器,确保了只有一个对象。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义