寻找纯面向对象的语言

时间:2010-01-27 16:28:33

标签: programming-languages oop

我认为面向对象编程被高估了,但我想学习这个范例。我一直在尝试使用QT 4在PHP 5和C ++中执行此操作。不幸的是,我倾向于以结构化方式编程,我不使用很多继承也不使用多个实例。我想我必须学习一种纯粹的面向对象语言,迫使我使用上述功能。

我认为最好的选择可能是学习Ruby。你可以确认或命名更好的替代方案吗?

我主要在x86-64 Linux上工作。

15 个答案:

答案 0 :(得分:33)

面向对象编程与语法无关。它是一种编程范式。

语言可以强制您使用对象(例如,如果所有是一个对象),但使用其中一种语言不会“强迫”您学习对象 - 面向编程

  

我不使用很多继承,也不使用多个实例

您必须了解以及何时使用这些技术(数据抽象,封装,多态和继承)来在对象中思考。在面向对象的编程中获得一个很好的参考,并使用您最熟悉的任何语言(支持OOP)来应用这些技术。

答案 1 :(得分:22)

如果您想要纯粹的OO语言,请尝试Smalltalk。一切都是Smalltalk中的一个对象。这不是Java的情况,其中原始类型(int,float)本身不是对象。

如果它不是一种'纯'OO语言,Java是一个很好的选择,因为它更主流。

答案 2 :(得分:9)

对于纯面向对象语言,请查看Smalltalk。我现在正在读这篇文章。

希望这有帮助。

答案 3 :(得分:8)

问题不是真正的语言,而是你使用它的方式

我们不使用OO功能,因为它们很花哨,但因为我们有时间(包括长期运行)。

我建议让代理人审核您的代码吗?你讨论一下吗?你可以复习一下吗?我认为反馈不仅仅是阅读或编写代码,而是您不必面对或讨论具体代码的内容。

答案 4 :(得分:7)

在Mono上尝试Java或C#。

<强>理由:

  1. 我尊重Smalltalk,一定应该知道它的概念以更好地理解OOP,但学习语言本身是不切实际的恕我直言。

  2. 虽然Java和C#可能不是“绝对纯粹的”OOP(例如它们已经结合了一些函数式编程方法),但它们本质上是基于OOP的,它们是主流的(因此它们具有更大的社区)它们比Smalltalk恕我直言更容易学习。

答案 5 :(得分:7)

很多人都在暗示Smalltalk,所以我会与众不同并建议Eiffel。 ;)

学习OO原则的好语言,也有像DBC(Design By Contract)这样的好东西。

答案 6 :(得分:6)

问题不在于语言。无论您使用何种语言,您仍然可以在一个类中编写所有代码,或者使用类级方法,并最终编写结构化代码。虽然纯粹的OO语言会让它变得更难,但我已经给了很多学生,他们试图将结构化编程变成Java和C#。

我的建议是查看OO编程的一些很好的例子,并看看OO如何使自己适用于某些设计模式,这些模式真正展示了OO的功能,使结构编程能够做同样的事情,但代码更少对其他程序员来说更具可读性。

答案 7 :(得分:5)

阅读实施Smalltalk的Daniel H. H. Ingalls撰写的文章 Design Principles Behind Smalltalk 。它决定了OOP的真正本质。

答案 8 :(得分:4)

我建议使用python。它通过了其他几个人提到的“一切都是对象=&gt;纯OO语言”标准来选择Smalltalk。函数甚至python null值(None)都是对象。

OO而不是Java(java有intInteger)。更重要的是,它比Smalltalk更受欢迎,所以你更有可能获得它的帮助。

Python也可以在没有继承(“duck-typing”)和函数式编程的情况下进行多态,这两种语言在“主流”语言中都变得越来越普遍。

答案 9 :(得分:3)

答案 10 :(得分:2)

我认为如果你继续做你正在做的事情会更好,并逐渐尝试将OO用于多范式语言的编码风格。 OO是对一些事物进行建模的好方法,但是并不是所有的编程。 OO非常适合需要灵活性的地方。对于部分代码,Procedural是一个非常好的范例,你需要一个简单的解决方案来解决一个简单的问题而不需要大量的抽象。

学习一种“纯粹的”OO语言会让你感觉如何使用OO功能,但是你不会被迫选择用于任何给定代码段的范例,当使用它们时,它不会给你一个良好的感觉。我认为学习实用OO的一个更好的方法,就是OO作为一种宗教,就是学习D,Python或Ruby这样的多范式语言(或者坚持使用C ++和PHP,尽管这些语言的OO特征非常“强硬”在“)上,阅读设计模式以了解OO的”原因“,并逐步尝试将更多OO设计集成到您的程序中,并能够将结果与您在同一语言中编写的程序进行比较。 OO版本通常会更好,但并非总是如此。

答案 11 :(得分:1)

尝试使用Common Lisp对象系统(CLOS)。它不像Smalltalk那样是“纯粹”的OOP,但是lisp中的类型层次结构至少是完整的(对Java来说可以说更多),大多数其他语言,甚至是OO语言,都没有泛型方法,multidispatch,方法组合,esp:before,:after和:around。 CLOS提供的所有运行时类对象或reinitialize-instance。

答案 12 :(得分:1)

我建议采用敏捷方法,然后按照您认为自然必须的方式编写代码。然后尝试将其重新考虑到OO范例。我非常推荐Marin Fowler关于这个主题的经典(重构)然后很好地钻研四人帮的设计模式(非常着名,明白无误),然后也许Joshua Kerievsky的“Refactoring to Patterns”和Fowler的PoEAA,让你在OO中理解和思考方面做得非常远。

这与在阅读有关OO概念的东西后尝试做OO的Up-Front-Deisng式方法形成鲜明对比。在尝试类似敏捷的方法时,无需提及良好的理论背景,但精神是将自己重构为OO,而不是从现在正在做的任何事情转向OO。

答案 13 :(得分:1)

面向对象编程几乎与您使用的语言无关,与您的编程方法有很大关系。面向对象的编程取决于您如何规划事物以及如何构建代码。您可以使用像Java这样的语言,它迫使您使用一些面向对象的功能,但如果只是坐下来将所有代码放在main()方法中,那么您还没有进行任何面向对象的编程。

我的建议不是学习不同的语言,而是研究面向对象编程本身的范式以及使用面向对象的分析和设计规划和实现程序的各种方式。了解要开始的抽象,封装,继承和多态。对UML有一个很好的感觉。然后研究面向对象编程中使用的设计模式。

确保在编码之前完成所有这些操作。您可能面临的最大震惊是在编码之前需要花多少时间思考。花时间以面向对象的方式规划您的程序对于习惯于以面向过程的方式坐下来编码的人来说非常困难。如果你花时间提前计划你要做的事情(当然,因为编程是关于小的迭代,不要太疯狂),你会发现你可以创建更好的代码第一次,对于日益复杂的任务。

答案 14 :(得分:-2)

我在这里看到很多建议来学习坦率地说不可销售的语言。作为一个年轻人,你可能并不关心并且热衷于学习(我知道b / c我一直在那里),但是当你把食物放在桌子上的时候,你会后悔用这些语言。说实话,阿达是我最喜欢的语言,我很乐意为它做一个职业,但是她不付账单所以我不得不与她分手。 :(