Oop 面向对象编程的实际应用

Oop 面向对象编程的实际应用,oop,paradigms,Oop,Paradigms,我最近和一位不喜欢这本书的同事进行了一场辩论。引起我注意的是他说的话: “在对象中进行编码有什么意义?如果是重用,那么我可以创建一个库并调用手头任何任务所需的函数。我需要多态性、继承、接口、模式等概念吗?” 我们是一家小型公司,为电子商务网站和房地产开发小型项目 如何在“日常、真实”设置中利用OOP?或者OOP真的是为了解决复杂的问题,而不是为了“日常”开发吗?不仅仅是为了让某些东西正常工作——你朋友的观点是,设计良好的OO设计更容易理解、遵循、扩展、扩展和实现。例如,委派分类相似的工作或保存应

我最近和一位不喜欢这本书的同事进行了一场辩论。引起我注意的是他说的话:

“在对象中进行编码有什么意义?如果是重用,那么我可以创建一个库并调用手头任何任务所需的函数。我需要多态性、继承、接口、模式等概念吗?”

我们是一家小型公司,为电子商务网站和房地产开发小型项目


如何在“日常、真实”设置中利用OOP?或者OOP真的是为了解决复杂的问题,而不是为了“日常”开发吗?

不仅仅是为了让某些东西正常工作——你朋友的观点是,设计良好的OO设计更容易理解、遵循、扩展、扩展和实现。例如,委派分类相似的工作或保存应该放在一起的数据(是的,甚至C结构也是一个对象)要容易得多。

好吧,我相信很多人会给出更多学术上正确的答案,但以下是我对一些最有价值的优点的看法:

  • OOP允许更好的封装
  • OOP允许程序员以更符合逻辑的方式思考,使软件项目更易于设计和理解(如果设计良好)
  • OOP是一种节省时间的方法。例如,看看你可以用C++字符串对象、向量等等做的事情,所有的功能(以及更多)都是“免费”的。现在,这些是类库的真正特征,而不是OOP本身,但是几乎所有的OOP实现都有不错的类库。你能用C语言实现所有这些东西吗?当然但是为什么要自己写呢

我个人的观点:背景


当您在OOP中编程时,您对上下文有了更好的了解。它可以帮助您以更容易理解的方式组织代码,因为现实世界也是面向对象的

OOP的好处在于将一组数据绑定到一组行为

因此,如果需要对一组相关数据执行许多相关操作,可以编写许多对结构进行操作的函数,也可以使用对象

对象以继承的形式为您提供一些代码重用帮助

在IME中,使用具有一组已知属性和方法的对象更容易,而保留一组复杂的结构和对其进行操作的函数则更容易

有些人会继续谈论遗传和多态性。这些都是有价值的,但OOP的真正价值(在我看来)来自于它封装数据并将数据与行为关联起来的良好方式

您应该在项目中使用OOP吗?这取决于您的语言支持OOP的程度。这取决于你需要解决的问题类型


但是,如果你做的是小型网站,你仍然在谈论足够的复杂性,如果开发语言中有适当的支持,我会使用OOP设计。

看看设计模式的使用,你会看到OOP的实用性。它不仅涉及封装和重用,还涉及可扩展性和可维护性。正是这些接口使事情变得强大

举几个例子:

  • 在没有对象的情况下实现流(装饰器模式)是困难的

  • 如果没有对象,将新操作添加到现有系统(如新的加密类型(策略模式))可能会很困难

  • 看看PostgresQL的方式 与您的 数据库手册说数据库应该 实施后,您将看到一个巨大的 差别。这本书会建议 每个操作符的节点对象。 Postgres使用无数的表格和数据 宏尝试模拟这些节点。 它不那么漂亮,也不那么漂亮 正因为如此,很难扩展


清单还在继续。

所有编程范例都有相同的目标:隐藏不必要的复杂性

有些问题很容易用命令式范例解决,就像你朋友使用的那样。其他问题可以用面向对象的范例轻松解决。还有很多其他的。主要的编程(逻辑编程、函数编程和命令式编程)都是等价的;面向对象编程通常被认为是命令式编程的扩展

当程序员对相似但不相同的项进行建模时,最好使用面向对象编程。命令式范式将把不同类型的模型放在一个函数中。一个面向对象的范例将不同类型的模型分离为相关对象的不同方法


你的同事似乎陷入了一种模式。祝你好运

设计胜过技术和方法。好的设计往往包含复杂度管理的通用原则,如德米特定律,这是OO语言特性努力编纂的核心

好的设计并不依赖于特定于OO的语言特性的使用,尽管使用这些特性通常是最符合个人利益的。

它不仅使

  • 在当前情况下,为其他人(和您自己)编程更容易/更易于维护
  • 它已经允许更简单的数据库CRUD(创建、更新、删除)操作
您可以查找有关它的更多信息: -Java:Hibernate -dotnet:实体框架

看看LINQ(VisualStudio)如何让您的编程生活更轻松

  • 此外,您可以开始使用设计模式来解决实际问题(设计模式都是关于OO的)
也许通过一个小演示来演示更有趣:

  • 假设您需要以类似的方式在文本文件中存储员工、帐户、成员和书籍
.PS。我试着用一种虚假的方式写它:)

OO方式 您调用的代码: io.file.save(objectsCollection.ourFunctionForSave())

类objectsCollection

函数ourFunc
   for each _Object in objectsCollection
         Objects &= _Object & "-"
   end for