IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:OOP

共 26 篇相关文章

IT 累计浏览 3,018

Javascript面向对象编程(三):非函数对象的继承

这篇讲的是JavaScript中非函数对象如何实现继承。作者延续了面向对象编程系列的讨论,聚焦于一个常见但容易忽略的场景:当你需要创建的对象本身不是函数,而是一个普通的数据对象(比如一个配置对象或字典)时,如何让它也能便捷地继承另一个对象的属性和方法。 文章深入对比了几种可行的方案。一种是利用构造函数和原型链的传统方式,但作者指出这对于非函数对象来说略显笨重。更巧妙的方案是直接使用`Object.create()`方法,它能基于一个现有对象创建一个新对象,并将该对象指定为新对象的原型,从而实现干净利落的继承。文中通过代码示例,清晰地展示了如何设置原型、处理属性查找,以及这种方式在保持对象纯净性上的优势。 作者强调,选择哪种方式取决于你的具体需求:如果需要的是一个全新的、可复用的“蓝图”,传统构造函数仍有其价值;但如果只是想快速创建一个带有特定行为的数据对象,`Object.create()`配合直接设置原型,是更简洁、更符合现代JavaScript习惯的做法。理解这些差异,能帮助你在编写模块化和可维护代码时做出更合适的选择。

IT 累计浏览 2,711

Javascript面向对象编程(二):继承

这篇讲的是在JavaScript中如何通过“继承”来复用代码和构建对象层次,是“封装”之后的进阶主题。作者从原型链的本质出发,逐步拆解了构造函数继承、原型链继承、组合继承以及寄生组合继承等多种经典方案。文章不仅展示了每种方式的代码实现,更重点对比了它们各自的优缺点,比如原型链继承会共享引用属性、组合继承会调用两次父类构造函数等关键问题。 在分析这些差异的基础上,文章最终推荐了寄生组合继承作为更优雅的实践方式,因为它能高效复用方法且避免不必要的副作用。对于想深入理解JavaScript对象模型、或在实际项目中需要设计继承结构的开发者来说,这篇文章提供了一条清晰的梳理路径,帮助你在不同方案间做出合理的选择。

IT 累计浏览 3,854

Javascript 面向对象编程(一):封装

这篇讲的是JavaScript学习中最令人头疼的问题之一——封装,并且是“面向对象编程”系列的开篇。作者没有从抽象概念入手,而是直接切中开发者常遇到的困惑:为什么在JS里写一个“类”,感觉和Java或C++那么不一样? 文章细致地拆解了JavaScript独有的封装实现方式。它并非语言内置的、严格的“私有”或“公有”字段,而是巧妙地借助函数作用域和闭包来模拟。作者通过具体的代码示例,展示了如何用工厂函数配合闭包来创建真正私有的内部变量,以及如何通过返回一个对象来暴露必要的公开方法。这种“基于函数的对象生成模式”是JavaScript早期经典的实践。 对比来看,与ES6之后引入的、语法更像传统语言的class语法糖不同,这种基于函数和闭包的方式,更底层地揭示了JavaScript面向对象的动态本质。理解这种差异,对于在不同场景(如需要严格封装数据的库开发,或追求灵活轻量的快速应用)下选择合适方案至关重要。文章最终指向一个核心:理解JavaScript的对象,要从理解其函数和闭包的独特能力开始。

IT 累计浏览 3,097

我所偏爱的 C 语言面向对象编程范式

这篇讲的是作者如何用纯 C 语言实现面向对象编程,而不是直接使用 C++。作者从实际项目需求出发,对比了 C++ 与 C 在封装、继承和多态实现上的根本差异:C++ 依赖编译器的隐式支持,而 C 语言需要通过结构体封装数据、函数指针模拟虚表、手动管理 vtable 指针来显式构建这些机制。 文章重点展示了 C 语言实现的几个巧妙之处:比如用结构体首地址兼容来实现“伪继承”,以及如何通过宏和约定来减少重复的样板代码。作者同时指出,这种做法虽然更底层、更可控,但也意味着开发者需要承担内存布局对齐、手动调用析构等额外责任。 文中给出的结论很明确:对于嵌入式开发、系统编程或需要与 C++ 模块交互的场景,这种轻量级的 OOP 范式能带来更小的二进制体积和更清晰的控制流。而在快速迭代的复杂业务系统中,C++ 原生的面向对象特性仍然更具生产力。

IT 累计浏览 3,757

模板技术,设计模式和OOP实践心得

这篇讲的是作者在长期编码中对模板技术、设计模式与面向对象编程(OOP)三者如何协同落地的实战总结。他不满足于理论套用,而是从实际项目痛点出发,探讨了在复杂业务逻辑中,如何用模板方法封装不变的流程骨架,同时灵活嵌入策略、观察者等设计模式来应对多变的需求分支。 文章重点剖析了在OOP体系下,过度设计与设计不足的常见陷阱,并给出了判断何时引入模式的务实标准。比如,他通过一个具体的数据处理模块重构案例,展示了如何用模板技术统一多步骤流程,再通过策略模式将可变的算法部分解耦,最终在保持代码扩展性的同时避免了类爆炸问题。这些经验对于平衡代码的规范性与灵活性,具有很强的直接参考价值。

IT 累计浏览 2,706

C++讲解

这篇讲的是C++对C语言结构体的一次重要功能扩展。作者直接切入两者最核心的差异:在C语言中,结构体(struct)仅用于封装数据,内部不允许定义成员函数;而到了C++,结构体被赋予了更完整的能力,可以像类(class)一样包含函数。 这个改变不仅仅是语法层面的“补全”,它带来了编程范式的演进。C++通过允许结构体承载行为(函数),使得数据与操作其数据的逻辑能够被紧密地组织在一起,这为面向对象编程中“封装”概念的实现铺平了道路。在C++中,`struct`和`class`默认的区别仅在于访问控制(`struct`默认公有,`class`默认私有),而在功能上已趋于一致。 因此,文章点明了C++结构体更适用于需要将数据及其相关操作作为一个整体来管理的场景,而C语言的结构体则专注于纯粹的数据组合。这个对比,清晰地揭示了C++在类型系统设计上的一次重要进化。