Какой язык следует использовать для обучения объектно-ориентированного проектирования и развития в университете? [закрыто]

Я понимаю, что C ++ обычно предлагается в качестве первого языка ООП и в качестве второго языка программирования (после C) в моей стране (Бангладеш). Я учил его несколько раз, и проблема, с которой я столкнулся, заключается в том, что учащиеся часто склонны думать о C ++ как о расширении C, то есть C с помощью cin и cout! Это заставило меня подумать о том, чтобы преподавать Java как первый язык ООП в предстоящем семестре.

Каково ваше мнение? Я хотел бы получить некоторые предложения от профессиональных программистов, а также от ученых.

6 голосов | спросил Punter 25 +04002011-10-25T20:29:10+04:00312011bEurope/MoscowTue, 25 Oct 2011 20:29:10 +0400 2011, 20:29:10

9 ответов


3

Я думаю, что C ++ подходит как первый язык лучше, чем C. Вы можете подумать о том, чтобы начать вводный курс программирования с C ++, но без вещей OOP. Тогда учебная программа будет выглядеть как -

  • Введение в программирование на C ++
  • Введение Объектно-ориентированное программирование на C ++ (в следующем семестре)

Есть несколько преимуществ -

  • Это решает основную проблему, о которой вы упомянули, - при обучении ООП с помощью C ++ учащимся, имеющим опыт C, они считают, что они просто изучают новый язык, а не парадигму (ООП). Но, изучая оба курса с C ++, они узнают, что они узнают что-то новое.
  • Вы можете использовать более простые конструкторы языка C ++, такие как cin /cout, ссылки, std :: string и т. д. Однако я не говорю, чтобы оставить указатели. Вы все еще можете научить указателей после введения ссылки, не покидая C ++. Тогда будет намного легче понять ИМХО.

Если вы начинаете с C ++, вам, возможно, придется использовать некоторые функции-члены различных классов библиотек, таких как std :: string, File IO. Но не стесняйтесь. Вызов или использование функции-члена класса не требует знаний ООП. ООП требуется для разработки класса. И вы можете оставить один или два класса в курсе ввода, чтобы дать представление о конструкциях C и различиях между C и C ++. Тогда студенты также будут знать C. И моя просьба - уделять особое внимание STL и универсальному программированию на C ++. Потому что люди используют Java для огромной поддержки библиотеки. Но многие из них не знают, что большинство из них также существует в C ++ STL. Удачи.

ответил Gulshan 27 +04002011-10-27T09:57:35+04:00312011bEurope/MoscowThu, 27 Oct 2011 09:57:35 +0400 2011, 09:57:35
25

Если вы пытаетесь преподавать (чистый) ООП, я бы рекомендовал не использовать C ++ и вместо этого использовать чистый язык OO. Одной из сильных и слабых сторон C ++ является то, что это язык с несколькими парадигмами, причем ООП является лишь его небольшой частью. Добавьте свою (в основном) обратную совместимость с C, и не удивительно, что многие люди, знакомые с C, попадают в ловушку «C cout».

Я бы настоятельно рекомендовал использовать чистый язык OO, например Smalltalk, если вы хотите научить своих учеников концепциям OO. Да, они вряд ли найдут работу с приложениями Smalltalk, но дело не в этом. Если они разумно компетентны в выборе языков программирования, они легко освоят другой язык. На данный момент вы not пытаетесь сделать их «программистами X», но вы хотите, чтобы они получили представление о конкретной парадигме, чтобы выбрать язык, который является чистой реализацией парадигмы и , скорее всего, незнакомые студентам, должны помочь обучению, потому что вы избежите моментов «О, я знаю, что здесь есть».

ответил Timo Geusch 26 +04002011-10-26T03:23:29+04:00312011bEurope/MoscowWed, 26 Oct 2011 03:23:29 +0400 2011, 03:23:29
10

Я бы сказал, это зависит от степени.

Я бы преподавал C # или Java для CIS /MIS, потому что это то, что используется при программировании реальных бизнес-приложений на современном рынке.

C ++, Scala или Smalltalk для студентов CS. Существует много образовательных языков программирования, предназначенных для обучения и обеспечения соблюдения ООП.

ответил Randy Burden 25 +04002011-10-25T21:08:13+04:00312011bEurope/MoscowTue, 25 Oct 2011 21:08:13 +0400 2011, 21:08:13
3

Я бы взял лучшее из обоих миров в некотором смысле и научил их Objective-C. Это строгий надмножество C, поэтому вы можете отказаться от кода C прямо и не беспокоиться об этом, если дело доходит до этого. Он имеет объектную модель стиля Smalltalk, которая имеет тенденцию к чуть более чистым ощущениям, чем C ++ и Java. Синтаксис немного странный, и для этого потребуются Mac или использование GNUstep, но если вы хотите, чтобы язык, который балансирует практику и чистоту немного лучше, чем C ++ или Java, я бы выбрал его. Это определенно помогло мне изучить его до изучения объектно-ориентированного дизайна.

ответил World Engineer 26 +04002011-10-26T04:21:32+04:00312011bEurope/MoscowWed, 26 Oct 2011 04:21:32 +0400 2011, 04:21:32
3

Не преподавайте Java. Проблема с Java заключается в том, что все, что вы можете узнать из нее, состоит в том, что наследование - это молот, и абсолютно каждая проблема - это гвоздь. Кроме того, терминология Java в значительной степени смущает такие темы, как ориентация объектов и управление памятью, а не то, что вы хотите научить бедных студентов, которым повезло бы испытать любую из тех вещей, которые преподавались независимо.

Вы хотите научить ООП. Не «Объекты - это наши Боги». Наследование - это наше божественное оружие против всех проблем программирования. Мы не будем подвергать сомнению алгоритм сбора мусора и изучать другие формы управления памятью. Примитивы должны быть рассмотрены всеми. Мы будем существовать исключительно в Священном Законы виртуальной машины. "

Тот факт, что ваши ученики видят C ++ как «C с помощью cout», - это отказ преподавания C сначала, а затем не должного обновления до C ++. Обычное средство состоит в том, чтобы вообще не преподавать C, так как это действительно излишне для этого и очень опасно. Или вы могли бы нанять умных учителей. Но это не очень жизнеспособно, потому что это действительно сложно решить после того, как он был создан.

C ++ делает отличный язык OOP, потому что C ++ не путает ориентацию объектов с управлением памятью, и это позволяет правильно взвешивать парадигму, когда вы можете использовать ее альтернативы, если хотите. Как вы узнаете, когда не использовать ООП, если это все предложения языка?

ответил DeadMG 26 +04002011-10-26T23:56:43+04:00312011bEurope/MoscowWed, 26 Oct 2011 23:56:43 +0400 2011, 23:56:43
2

Я считаю, что выбор языка менее важен, чем набор библиотек. Позвольте пояснить.

В Univ было несколько классов C ++ (первый язык OO). Здесь меня научили OO-механизмам, таким как наследование и полиморфизм, но у меня не было «рабочего» понимания OO. Я чувствую, что я действительно начал понимать, как писать программы OO (все объекты, объекты общаются друг с другом и т. Д.) Только после того, как я начал работать над более крупным проектом java, где мне пришлось использовать библиотеки JDK. В C ++ мне всегда казалось, что я могу уйти с большими процедурными кусками, спрятанными в не-объектах.

Я предполагаю, что я получаю тот же эффект (т. е. работа с объектами) от использования STL на стороне C ++.

ответил louisgab 25 +04002011-10-25T20:46:58+04:00312011bEurope/MoscowTue, 25 Oct 2011 20:46:58 +0400 2011, 20:46:58
2

C ++ часто выбирается как язык OO в классных комнатах, главным образом потому, что он является одним из наиболее полезных языков. Много работы для программистов на С ++. Но, как говорилось ранее, он может легко привести людей в ловушку кодирования в нем как C и едва коснуться его части OO.

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

Я считаю, что если вы хотите избежать ловушки C, вы должны удалить их из мира C /C ++, чтобы они были вынуждены изучать новый язык, а также концепции OO, которые приходят с ним.

ответил MattG 26 +04002011-10-26T19:24:33+04:00312011bEurope/MoscowWed, 26 Oct 2011 19:24:33 +0400 2011, 19:24:33
1

Подсчитайте меня с толпой Smalltalk.

Однако, еще одна вещь, которая была бы полезной для обучения, заключается в том, что есть несколько способов, чем обрезать лошадь ООП. Например, я обнаружил, что многие люди, используемые для ветвления C ++ /Java семейства генеалов ООП, сталкиваются с большими проблемами, обертывая головы тем, как работает система класса R S4 (сама по себе на основе системы ООП Дилана).

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

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

ответил geoffjentry 26 +04002011-10-26T22:51:16+04:00312011bEurope/MoscowWed, 26 Oct 2011 22:51:16 +0400 2011, 22:51:16
0

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

В моей школе мы использовали OCaml в качестве нашего первого языка программирования (я программировал задолго до этого, но так и не научился). Несмотря на то, что он учит функциональному программированию (что, вероятно, не полезно для вас), часть OO очень чиста и легко читается /понимается. Для меня это объединяет много замечательных вещей для обучения: высокий уровень, строго типизированный, многопартийные и хорошая стандартная библиотека.

Говорить, что C ++ - лучший выбор, потому что он самый полезный, не имеет значения. Курсы программирования должны преподавать, как изучать программирование, а не только как программировать на определенном языке.

ответил Simon 27 +04002011-10-27T13:16:56+04:00312011bEurope/MoscowThu, 27 Oct 2011 13:16:56 +0400 2011, 13:16:56

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132