如何最好地实践OOP概念/原理?[关闭]


12

我想学习面向对象的编程语言,我不想为了任何目的而仅仅为了了解OOP的整个概念。那么谁能告诉我应该开始学习哪种语言?


1
您已经知道哪些语言?
Mchl 2011年

C,VB.NET和C ++,但不包含OOP部分
Caffeinatedwolf

1
选择VB.NET然后
Vinoth Kumar CM,2011年

不,我不要VB.NET,我希望你们能帮助我在Java,C ++,Python等之间进行选择...
Caffeinatedwolf

3
您想毫无目的地学习一些东西吗?
JeffO 2011年

Answers:


13

一些进一步的建议:

  • 我从未在OOP栏上读过的最好的书是Bertrand Meyer的“ 面向对象的软件构造”。这不是一个“容易”的阅读,因为您需要在某些地方认真思考。但这是我所见过的解释OO原理的最佳方法。

  • 至于语言:我会远离C ++。对于学习目的来说太大了。如果您想要一种能真正帮助您理解OO的语言(而不是您会在其中编写主流应用程序/使用它来工作的一种语言),那么请看一眼Smalltalk。或Eiffel(以上Meyer书中的语言)。

  • 如果您想要一种更主流但仍忠实支持OO原则的语言,那么Python是一个不错的选择。如果要进行静态键入,Java和C#也很不错。

不过要提一个警告:该语言不会教您OO。它只能帮助(或阻碍)它对OO概念的支持程度。学习面向对象实际上就是学习以面向对象的方式思考。为此,我将回到梅耶的书中。

hth。


1
C ++中的其他内容很重要。这是重要的了解虚拟继承。这是重要的了解强编译时通用的支持,这是重要的知道价值VS参考。使用Java之类的东西只是“ LA LA LA,我听不到您的声音,这是唯一的方法”。
DeadMG

2
是的,没有。OP的问题是关于学习的知识,这首先意味着基础知识。我不认为C ++是最合适的学习语言之一。话虽如此,Meyer还是涵盖了泛型和价值与参考,尽管这是更高级的主题。在本书的后半部分,他还谈到了协方差和反方差。但是他首先列出了基础知识。(并且Eiffel的静态类型为btw)。
sfinnie 2011年

1
我不会同意或不同意埃菲尔的建议,因为我从未使用过,甚至从未看过或阅读过任何有关它的内容。但是,正如我所说,我绝对不同意Java和C#的任何建议。
DeadMG

12

您可以学习任何面向对象的语言,例如C ++,Java,C#等,以尝试OOPS。

如果您真的想学习OOP,则需要超越语言范围进行思考,并了解它是一种范例,可以帮助简化软件程序中的漫画复杂性,就像我们在现实世界中如何管理它们一样。然后学习OO中的基本概念,例如多态,继承,封装(PIE)

Grady Booch着有许多有关面向对象的分析和应用程序设计(第二版)的好书

另外,您可以尝试这样的博客,我发现这很简单,因此可以从fascinatingoops.com开始


3

您想学习OOP吗?一个答案-Smalltalk。

它是一种优雅的语言,是面向对象的。您将从一开始就学习OOP,而不会被其他语言设法吸收的所有其他干扰所困扰。

Smalltalk获胜。并且也有一些不错的免费电子书(请参阅:Stephane Ducasse


3

您将必须学习C ++,或者像Smalltalk这样的先祖。C ++在面向对象,内存管理以及引用与值之类的概念之间提供了清晰的分隔,并且具有强大的通用支持。

不要学习Java或C#之类的.NET语言。当您学习Java之类的语言时,您将学习诸如“对象始终在堆上并且始终是引用”之类的知识,这仅适用于Java,而对于OOP则完全不适用。对于第一语言,这种概念的混合(面向对象,内存管理,引用与值)非常危险,因为一旦将它们卡在脑海中,很难将它们撤回。C#是有些更好的在这方面,但并不多。此外,他们在缺乏通用编程支持的情况下很容易教“继承是重锤,万事万能”。


这是真的。我以前从没有做过,实际上,当使用非常专注于OOP的语言并尝试使用OOP解决所有问题时,您将永远不会了解哪些问题并不真正适合OOP。
daramarak

1

学习OOP概念的最好方法是编写越来越多的代码并经常对其进行审查。实践成为一个好的程序员。

考虑现实世界中的场景,定义问题陈述-用代码解决它并进行审查。您可以随时从/codereview//获得帮助以获取评论:)

编码愉快!!!


0

脚步

  1. 了解它们的含义。
  2. 了解如何实施它们。
  3. 进行项目开发,选择您的语言[应该集成OOPS原理,如VB.NET或C#或C ++或Java等]
  4. 考虑一下如何通过OOPS 简化项目逻辑。[注意:不要仅仅因为要拥有OOPS而实施OOPS,它们就应该解决您的目的。
  5. 不要忘记:您也将从错误中学习

0

我与OO世界的第一次接触是C ++,这不是一个糟糕的开始。但是学习Python时,我有了很大的进步。区别来自于语言:与在Python中尝试相同的想法相比,在C ++中尝试的想法('我如何以OO方式解决这个问题?')需要编写更多的代码,并且包含更多的陷阱。因此,我建议使用Python。


0

我认为您在尝试学习OOP时不应该使用另一种语言。对我来说,如果我可以与已经知道的东西联系起来,那么更容易掌握理论然后学习应用它。弄清楚新的语法就很麻烦。

您可以从任何OOP书开始。同样,我会选择一种语言。读一本关于重构(OOP风格)的书有助于我进行OOP的应用。我参加了一个现有项目(不分散需求收集),并找到了改进它的新方法。不仅仅是为了OOP而面向对象。然后,您可以学习如何在新项目中从头到尾进行操作。这里的逻辑是,您一开始就不一定总是正确。如果您知道合适的地方,那将更好。像大多数事情一样,它不能解决所有问题。

某些语言有一定的局限性。如果您的目标是成为多重继承的大师,那么.NET就是您了。


0

我将在这里违背传统思维,建议使用 OOP 的最简单语言不一定是学习它的最佳语言。我最初是使用C ++进行OOP的,但是直到阅读Larry Wall关于Perl的OOP的Camel书中的章节,我才“了解”它。由于某种原因,我在理解类和对象之间的区别之前遇到了麻烦,直到必须将对象明确地祝福到一个类中为止。直到使用GObject在C中进行操作,我才真正理解OOP的底层实现,在这些情况下,这些细节都没有对您隐藏。直到参加与语言无关的公司课程,我才真正理解最佳实践。这是一个很大的话题,

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.