Подтвердить что ты не робот

Что является хорошим стандартным упражнением, чтобы узнать особенности OO языка?

Когда я изучаю новый язык, я часто программирую некоторые математические функции, чтобы привыкнуть к синтаксису потока управления. После этого мне нравится реализовать некоторые алгоритмы сортировки, чтобы привыкнуть к конструкциям массива/списка.

Но у меня нет стандартного упражнения для изучения возможностей OO языков. Есть ли у кого-нибудь инвентарь для этого?

Хороший ответ, естественно, предоставил бы наследование, полиморфизм и т.д., для программиста, уже комфортного с этими понятиями. Идеальный ответ - это тот, который может быть передан в нескольких словах, без двусмысленности, в том смысле, что "реализовать mergesort" абсолютно однозначен. (Например, ответ на "дизайн игры" настолько расплывчатый, чтобы быть бесполезным.)

Любые идеи?

EDIT: Я должен заметить, что результаты здесь несколько ироничны. 10 фаворитов и (изначально) 5 избранных предполагают, что это вопрос, которого интересуют другие. Но самый верный ответ - тот, который говорит, что нет хорошего ответа. Ну что ж. Я думаю, что я посмотрю учебник ниже, я нашел игры полезными в прошлом для OO.

4b9b3361

Ответ 1

Я не могу себе представить, что может быть стандартный набор упражнений, которые, естественно, будут включать возможности OO языка программирования для всех. Многие вводные учебники OO полны Animals, Cats и Dogs, которые, по крайней мере, не режут его для меня. Найдите проблемный домен в OO, с которым вы много боролись, и попытайтесь использовать его в качестве набора упражнений для каждого выбранного вами языка.

Конструкции OO, которые мы привыкли думать в терминах, могут не иметь смысла на языке. На ум приходит Javascript, который встряхивает всю основу того, как мы думаем об объектах в целом. Тем не менее, вы не должны адаптироваться к языку, а скорее адаптировать язык для своих целей. Со временем, когда ваш хранилище знаний растет и улучшается с опытом, вы, естественно, захотите реализовать то, что считаете лучшим на каждом языке программирования, который вы используете, независимо от того, что предлагает язык.

Ответ 2

Некоторая забава: реализовать иерархию Shape/Circle/Ellipse, не попадая в ловушку (это можно сделать очень хорошо в Java, Scala и т.д.).

изменить реализовать его, прежде чем рассматривать предлагаемые решения в статью в Википедии:)

Ответ 3

Хороший вопрос... На мой взгляд, лучший учитель просто находит простой пример функций OO и пытается написать что-то одно, создавая новые примеры для себя и пытаясь разработать простое приложение, в котором вы можете подключить все функции OO.

Реализация алгоритма, такого как сортировка слияния, которые не используют функцию OO, потому что они не нужны, это бесполезно. Попробуйте реальные полезные программы.

Помню, когда я изучаю OO, я пишу приложение с общим интерфейсом "Animal" с методами и классами, которые наследуют его, например "амфибия". это было fanny время;)

Ответ 4

Я использовал Hunt The Wumpus. Первоначальная реализация в BASIC была вовсе не OO, но если вы начинаете ее, она очень хорошо подходит для этого.

Ответ 6

Это может быть слишком специфично, но это то, за что я благодарен за то, что действительно понял, что я лично понимаю ООП. Для моей работы мне пришлось написать код для извлечения данных из большого количества разных источников. Мне показалось, что в то время мне было необходимо решить эту проблему с точки зрения разработки различных классов DataProvider. То, что только постепенно стало ясно, было то, как много кода я мог бы повторно использовать, разбив различные виды поставщиков вниз на иерархические категории, например:

  • DataProvider
    • TextDataProvider
      • HtmlDataProvider
      • CsvDataProvider
      • XmlDataProvider
    • BinaryDataProvider

... и так далее. Я бы предположил, что любая проблема вроде этого - когда вам нужно выполнить определенную задачу (в моем случае, извлечение данных) кучей разных способов (например, из нескольких источников) - станет отличной возможностью изучить в ООП и, надеюсь, научиться ценить, насколько он полезен.

Ответ 7

Я лично считаю, что лучший способ узнать OO - написать собственную среду тестирования.

Я нахожу макет тестового Runner, владеющего одним или несколькими тестовыми наборами, каждый из которых имеет свои собственные тестовые примеры, достаточные для начальной точки, но вы можете легко вырастить его оттуда, и это может даже быть чем-то, что вам нужно использовать в будущем.

В качестве альтернативы, если вы хотите что-то полностью выбросить, всегда Enterprise FizzBuzz.:)