首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >混合OOP和非OOP

混合OOP和非OOP
EN

Software Engineering用户
提问于 2015-09-14 12:25:30
回答 1查看 547关注 0票数 1

我正在开发一个基于命令行界面的文字游戏。我用C编写它,但是有多种方法可以使用Objective重构代码:

  • 使用NSDictionary将数据存储在列表中(因为基础框架更容易读/写,但体积要大得多)而不是纯文本
  • 拥有带有方法的类(这不是件大事,但增加了代码的可读性)
  • 消除了在对象的char*名称与其int/enum等效项之间进行转换的需要(使用和enum表示事物可以减少使用普通非OO时的内存使用量和复杂性,否则我将不得不在任何地方使用strncmp )。

我想知道的是,混合OO-和非OOP是否有缺点。它仍然是命令行,这意味着大部分都是用纯非OO编写的。

有什么理由不让我把这些混在一起吗?

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2015-09-14 18:45:56

  1. 面向对象主要不是一种语言特性。它是一种编程范式/方法/风格。也就是说,您可以用纯C编写完美的面向对象代码,也可以用Java编写完全非面向对象的代码。
  2. 面向对象本身并不是一种美德。这在大多数情况下都是有帮助的,因此受到了很大的鼓励,但是在一些用例中,非面向对象的解决方案的工作效果也一样好或更好。
  3. 在同一个项目中,将面向对象的代码和非面向对象的代码混合没有问题。面向对象的代码可以调用非面向对象的代码,反之亦然。唯一可能出现的问题是混合用不同语言编写的代码。但是,正如布朗博士在评论中正确指出的那样,Objective是C的一个严格的超集,这意味着您可以将任何C代码编译成Objective。这与尝试将C代码编译为C++代码有很大不同,后者将强制在许多地方进行更改。但这不是您的问题,您可以轻松地从.c后缀切换到您需要的任何地方的.m后缀,而不会破坏文件中的代码。

也就是说,在重构游戏时,您的主要关注点应该是简化代码。如果您非常了解面向对象,那么简化您的代码很可能意味着使它非常面向对象。如果您还不知道如何很好地使用面向对象,那么尝试为每个问题找到至少两种不同的面向对象解决方案,并在每种情况下尝试选择更好的解决方案。但是不要试图将面向对象和非面向对象的代码分开。

关于您的enum/char*问题:我建议您阅读串实习并尝试在您的游戏中实现它。因为,一旦有了字符串,就可以通过比较它们的指针来比较字符串。这应该允许您以灵活和高效的方式减少enum的使用。

票数 4
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/297220

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档