Ответ 1
С++ - это не только язык ООП. Это мультипарадигма (процедурная, ООП, функциональная, общая...)
Итак, если вы хотите узнать только ООП, возможно, это не лучший выбор.
Каков наилучший путь для обучения ООП, если кто-то сделал программирование на C.
Мое намерение состояло в том, чтобы сначала совершить естественный прыжок и "увеличить с одним" и пойти на Страуструпа. Но так как я обнял маленького старого Бертран Мейера OOSC2 и я получил от приложения 1135 "... по словам Дональда Кнута, это сделало бы Эдсгера Дейкстра физически больным думать о программировании на С++" И сам Мейер ".., что С++ - не идеальный язык ООП..."
А как насчет этого Критика на С++ по этому вопросу: Критика С++
Должен ли я пропускать С++ и напрямую обращаться к С# или Java, если мое намерение - отличное и глубокое понимание современного OOP-языка, или я пропущу хорошие моменты по этому вопросу на С++?
Ну, я знаю, что это дискуссионная вещь, но я отмечаю ее wiki, и вы отвечаете за меня многого, что может пригодиться.
С++ - это не только язык ООП. Это мультипарадигма (процедурная, ООП, функциональная, общая...)
Итак, если вы хотите узнать только ООП, возможно, это не лучший выбор.
Я бы предложил С#. Синтаксис подобен, но он достаточно разный, чтобы вы не возвращались к старым привычкам C. С С++ я всегда обнаруживал, что пишу C, со случайным объектом, брошенным.
Да. Если ваше намерение - "отличное и глубокое понимание современного языка ООП", перейдите на современный язык ООП. С# определенно квалифицируется на "современный" счет и гордится тем, что является ООП. Что-то вроде Smalltalk будет языком ООП, но оно менее современно. Вы всегда можете узнать оба.
Что касается С++, это вряд ли является языком ООП. Существует много хороших и веских причин для изучения С++, но не для того, чтобы вас интересовали только ООП.
Сегодня С++ характеризуется не ООП, а такими функциями, как универсальное программирование и в некоторой степени вдохновленным функциональными языками.
Из С++ можно извлечь много полезных уроков. Некоторые из них:
Если вы спрашиваете, следует ли вам изучать С++, я бы сказал, что да (наряду с 5-8 другими языками, С++ не является "особенным" ). Это один из многих языков, которые программисты могут извлечь из обучения).
Если вы спросите, будет ли С++ хорошим введением в ООП, я бы сказал НЕТ. Именно поэтому стоит изучить.
Основная идея С++ заключается в повторном использовании синтаксических идиом C, применяя к ним семантику ООП. Это приводит к объектам "в стеке", использованию ++
для итераторов и т.д. Синтаксис C был разработан в основном для облегчения реализации компилятора C, а не для ООП, и в результате С++ является довольно сложным языком и плохо подходит для обучения.
Java и С# намного проще изучить, но при этом придерживаются подхода ООП, основанного на классах, который использует С++. Java немного проще, чем С#, потому что разработчики С# знали Java и решили иметь аналогичный синтаксис с кучей дополнительных синтаксических лакомств. Эти плюсы делают синтаксис С# немного более сложным, поэтому он менее подходит для обучения.
Существует еще один структурный подход ООП, который является одним из Smalltalk. "Современный" и широко используемый язык, использующий этот подход, - это Javascript. Вы можете попробовать это. Javascript довольно крут, потому что вам нужен только веб-браузер, чтобы попробовать, и через браузер он имеет доступ к богатой графической среде. В том же семействе вы можете попробовать Lua, который, как говорят, прост и довольно популярен.
Я бы сказал, начните с Java. учебник по Java хорошо написан с множеством примеров, которые вы можете (должны) запускать и экспериментировать. Приступая к книгам, я бы сказал, проверьте Head First Java и Head First Объектно-ориентированный анализ и дизайн из серии Head First. После того, как вы намочите ноги Java и получите представление об объектно-ориентированных концепциях неизменно, вы столкнетесь с шаблонами дизайна и для которых книга Head First Design Patterns обеспечивает хорошее начало. Все это я считаю хорошей отправной точкой для изучения объектно-ориентированного программирования.
Любой язык будет работать, если вы узнаете его из хорошей книги. Я изучил как С++, так и Java, начиная с книг Брюса Эккеля.
После того, как вы знаете некоторые основы ООП, я бы предложил прочитать объектно-ориентированное программирование с использованием ANSI-C. Это даст вам некоторое представление о том, как работают языки ООП, поскольку он реализует язык ООП с языка C.
Для Java-ориентированного введения я настоятельно рекомендую Head First Object Oriented Analysis and Design из отличной серии "Head First" от O ' Рейли.
Я нашел книгу очень доступной и легкой для понимания, независимо от того, из какого направления вы пришли. Хотя книга использует Java, концепции ООП, обсуждаемые в книге, применимы к любому языку ООП.
Изучите С++ только в том случае, если вы хотите работать над ним, в проектах, которые его используют, в заданиях, поддерживающих код С++ (который будет продолжать существовать в течение многих лет). С++ далек от мертвого языка.
Но в наши дни это должно считаться нишевым языком для тех, кто начинает новый проект, и делает что-то вроде веб-приложения, богатого клиентского графического интерфейса и т.д. Большинство типичных приложений С++ будет самоотверженным выбором, например, преднамеренно что затрудняет для себя.
Но если вам нравится настоящий вызов, идите на это.
Гораздо больше ответов от меня на похожие темы:
Я бы сказал Java. Хорошая книга, которая мне помогла, - этот.
Несмотря на то, что я думаю, что многие из этих критических замечаний на С++ справедливы, в конце концов Java и С# не сильно отличались от С++ в парадигмах ООП, что явно влияло на них обоих. Сказать, что вы изучите ООП неправильно, изучая С++, а не Java, является своего рода глупостью, поскольку их модели ООП очень похожи.
И поговорить о наборе техник, которые программисты на этом языке используют (программирование шаблонов), и действовать так, как будто что-то, что вам нужно использовать, глупо. Говорить, что вы можете "вернуться в C", является еще одной глупой причиной - вы можете избежать ООП на ЛЮБОЙ язык (например, на Java, вы можете написать программу в пределах одного класса).
Хотите узнать одну из лучших причин, чтобы изучить С++ по Java или С#? Есть еще много интересных проектов, которые уже находятся на С++, а затем в двух других. Это меняется со временем, но посмотрите на SourceForge, и кажется, что C и С++ все еще являются преобладающими языками для типов проектов, которые мне интересны (игры, веб-браузеры и т.д.).
Я изучил ООП как в Ada95, так и в С++ и пришел из простых C и Ada83. Я не думал, что трудно понять концепции ООП с помощью С++, потому что я уже знаком с синтаксическими элементами и указателями.
Какова ваша цель? Чтобы стать хорошим разработчиком С++ или просто понять ООП?
Если это последний, выберите язык, который вы понимаете, и оттуда. Java, С# или даже С++ - все это будет хорошим выбором. Если это первый, вам придется прижаться и много узнать о С++ и о том, как он работает под капотом. Требуется время и практика, чтобы стать хорошим разработчиком С++.
Как уже упоминалось ранее, С++ поддерживает более одной парадигмы программирования. Вероятно, наиболее примечательным является смешивание классов и объектов вместе с "глобальными" функциями, которые легко возможны в одном файле и контексте.
Но, на мой взгляд, в С++ существует достаточная парадигма ООП для использования языка для изучения ООП. Гораздо важнее иметь хорошее руководство для самого ООП. Такой справочник научит вас использовать объектно-ориентированные элементы в С++ и как и с какой целью, и он не расскажет вам ничего о функциях C-стиля, которые вы также можете создать на С++.
Для вашего решения, какой язык выбрать, я бы рекомендовал немного взглянуть в будущее на то, что вы на самом деле хотите сделать в программировании. Если это веб-дизайн или богатый пользовательский интерфейс, у вас будет больше возможностей использования Java или С#, это скорее что-то ближе к разработке системы, С++ может быть лучшим выбором. OOP вы можете изучать с С++ и Java, С# или другими языками.
Для меня это немного похоже на вопрос: "Я хочу научиться переводить тексты с моего родного языка на другие языки. Какой второй язык я должен изучать? Исландский или суахили?" Для этого решения было бы более важно, ненавидите ли вы холодный или жаркий климат. (По крайней мере, я считаю это более важным, чем аргументы, которые некоторые лингвисты, вероятно, предпочтут одному из языков.)
Я думаю, что это правда, что, например, С# заставит вас намного больше, чем С++ писать OOP-код, но он делает это только с точки зрения языка SYNTAX. Но ООП больше о семантике, и это скорее не зависит от языка. Не существует семантической разницы между sin (0.5) (функция без контекста класса в C/С++) и Math.Sin(0.5) (метод класса в С#). Если вы закончите работу на С#, чтобы создать множество статических классов, что-то пошло не так с обучением ООП, хотя вы следуете (обязательно) объектно-ориентированному синтаксису.
Итак, мои два цента: попробуйте найти дополнительные цели программирования, которые вы выходите за рамки обучения ООП, и добавьте эти цели в свое решение для языка, на котором вы хотите погрузиться. Только для обучения OOP С++ в качестве примера языка хорошо, а некоторые другие языки также.
Мне нужно добавить: я сказал это с "прагматичной" точки зрения, предполагая, что вы действительно хотите работать и создавать программное обеспечение с тем, что вы узнали. Если у вас есть какой-то чистый научный, структурный интерес, мои аргументы могут быть неправильными. Тогда, возможно, самый чистый из всех языков OO (Smalltalk?, вероятно, не С++) является правильным выбором, независимо от того, кто на самом деле "говорит" на этом языке и с какой целью.
Через год, прочитав книги и попробовав примеры, я сломался и взял класс "Объектно-ориентированное программирование на Java" из локального колледжа. Я смог учиться в классе, где я потерпел неудачу самостоятельно. (Это необычно для меня - мне удалось научиться многим технологиям самостоятельно). Я думаю, что классная комната с настоящим учителем, который мог бы объяснить вещи, другие ученики, чтобы обсудить что-то с ними, и небольшие, но полезные задания и классные проекты для использования недавно полученного материала были хорошей комбинацией.
Многие из других студентов были ИТ-специалистами. Я наладил хорошие контакты. Увы, это было 18 лет назад, и я почти потерял связь со всеми из них.
Недостаток - это стоило денег, но оно было доступным, и когда меня уволили через год, я смог получить работу в качестве программиста на Java.
Я с другими комментаторами, на С++ слишком легко вернуться на C. Структурно, Java и С# похожи на C, а основные языки почти идентичны друг другу. Когда вы научитесь думать OO, С++ будет намного проще.
забыть о инструментах или прошлом (С++, oop, С##, обучение, мышление, попытка). позволяет поощрять творчество и импульс. Свежие подходы позволяют врезаться в будущее.
Что мне нравится в технологии, так это то, что она только начинается, Как искусство или математика
Я считаю, что ленивые толстые дислексики (которые не могут заставить себя притворяться умными) являются следующим шагом в эволюции;), шаг после этого будет искусственным мозгом. В этот момент мы все будем жить вечно и будем просто наслаждаться:)
как дизайнер, который смотрит на дизайн в реальной жизни, чтобы получить вдохновение (чайник, дверь, лифт или здание). Я смотрю на абстракции в реальной жизни, чтобы получить вдохновение (или там, где их нет), банки Риски системы (многомерная топология потоков и правил) или лист распространения (ячейки, строки и столбцы). Простота увеличивает визуальность и абстрактность (что делают строки ячеек и столбцы для финансирования) чрезмерно гибко, насколько быстро вы могли бы изменить набор правил в электронной таблице и программном обеспечении. Визуализация работает с человеческим мозгом, в то время как простая абстракция также помогает мозгу понять домен. Работа со сложной и сложной системой становится работой для ленивого Thicko (меня)
Я хочу включить эти же преимущества в Мои API
Лучшее счастье и благословение Бога