Сейчас я учусь на 4-ом курсе в IT-университете, и когда я говорю с моим профессором на эту тему, он отвергает мое мнение и дает мне очень жесткую критику (в моем университете нас учили C (ANSI) (в процедурном Занятия по программированию - в 1-м курсе в университете) до C ++ (в ООП-классе во 2-м курсе) и другие ...
Но в 13 лет я научил моего брата прежде всего Яве и ничему другому. Теперь он может делать практически все, что может делать обычный студент 2-го курса с Java.
Для вас, профессионалов, я хотел бы знать, почему вы думаете, что мы должны сначала научиться процедурному программированию.
Ответы:
Краткое резюме:
Потому что в реальном мире рано или поздно вам придется работать с процедурным кодом.
Потому что процедурные языки могут работать как расширение или введение в объектно-ориентированные языки, а не просто как альтернатива.
Дополнение к ответу 2. Поскольку ООП является более сложным, чем процедурное программирование, следовательно, лучше сначала изучить процедурное программирование.
Потому что в реальном мире программисты работают и объединяют несколько способов решения проблем, AKA «многопарадигмальное программирование», а не просто одна парадигма.
Большинство языков программирования являются мультипарадигмальными, на каком-то уровне, даже если их дизайнеры или обычные разработчики говорят обратное.
[NEW] Поскольку модульное программирование, которое обычно смешивается и путается с процедурным программированием, может быть применено к ООП, поэтому вопрос может быть прочитан как «Почему мы должны изучать модульное программирование, прежде чем изучать объектно-ориентированное программирование»
Расширенное скучное описание:
Пункт 1 очень ясный, а не дальнейшее объяснение.
Точка 2, Классы, Наследование, Полиморфизм, Интерфейсы, и так далее ...
Пункт 3, я кодирую Процедурный Паскаль, прежде чем я изучил Объектно-ориентированный Паскаль, когда я туда попал, я сказал: «Послушайте, классы похожи на небольшие процедурные программы ... ... и вы можете заставить их говорить друг с другом, круто !!! ».
Я слышал то же самое от людей, которые перешли от простого C к C плюс плюс.
Пункт 4. В большинстве случаев программисты сочетают несколько методов программирования или парадигм или способов решения проблемы. Функциональный, процедурный, ООП, логический.
Даже Java "Pure OO" не так простое объектное программирование, как говорится.
+1 балл за «процедурное программирование» вместо «структурное программирование». Или Модульное Программирование. Это важно
Хотя часто эти термины учат друг другу и используются взаимозаменяемо, это не так. Структурированное программирование включает в себя множество концепций, а не просто использование процедур, и одна из них заключается в том, чтобы программа не выглядела как «код спагетти».
Сегодня я прочитал несколько «чистых» ОО-программ, которые выглядят как «Объектно-ориентированный код спагетти», что означает, что программист использовал ООП, но его код выглядит как беспорядок.
Много раз я мог прочитать код ОО и сказать, что программист изучал структурированное программирование до ООП, потому что код понятен и упорядочен.
Что касается модульного программирования, я видел несколько приложений. в C ++ и PHP, которые не используют модули. *
источник
Я думаю, что аналогия будет похожа на математику. Сначала вам нужно изучить некоторые основные понятия (сложение / вычитание / ...), а затем перейти к более сложным темам (алгебра / исчисление). Процедурная программа очень линейна, и ее легче понять, когда вы изучаете синтаксис. ООП, возможно, считается более сложным, он основан на более простых конструкциях, используемых в процедурных языках, но является более абстрактным и более сложным для понимания. Начало работы с такими языками, как C, также приближает вас к аппаратному обеспечению и заставляет решать проблемы распределения памяти и указателей, которые вам необходимо понимать, но которые вы не можете использовать в таких языках, как Java / C #. Есть некоторая реальная ценность того, чтобы подвергаться этому в школе, независимо от того, идет ли это первым или вторым.
FWIW, это обязательно изменится в конце концов. Когда я пошел в школу, мы учились на Паскале и PL / 1. Мы не добрались до C, пока урок продвинутого языка (который встречается со мной). Я не изучал Java до аспирантуры - она еще не была изобретена!
источник
Объектно-ориентированное программирование - это организованный сборник процедурных фрагментов. Я думаю, что урок, который вы изучаете, заключается в том, что объектно-ориентированная методология помогает поддерживать организацию и ремонтопригодность. Есть много программистов, которые не могут сделать это различие и будут утверждать, что их программы являются объектно-ориентированными, когда они более процедурны.
источник
Вы не
Сначала мы изучили функциональное программирование , используя Scheme. Затем мы перешли к процедурному, затем ООП, а затем декларативному программированию. И верьте, хотите нет, хотя я уже знал программирование, я думаю, что на самом деле это было проще и для других людей: потому что FP - это как математика! Итак, вы уже знаете основы.
Я обсуждал это с собой много раз, и в конечном итоге я пришел к выводу, что это действительно зависит от того, насколько хорошо ваш учитель преподает вам концепции.
Там нет однозначного ответа, потому что:
Начинать с чего-то процедурного, такого как C (или даже сборки), может быть хорошим выбором, потому что вы узнаете, как на самом деле работают компьютеры.
Начинать с чего-то объектно-ориентированного Java может быть хорошим выбором, потому что его относительно легко изучить и применить ООП в реальной жизни, и потому что он учит вас ** формированию
Начинать с функционального программирования, такого как Scheme, может быть хорошим выбором, поскольку оно учит вас думать более абстрактно (с точки зрения функций вместо переменных), что в конечном итоге делает вас лучшим программистом.
Если ваш учитель не учит этому хорошо, то не имеет значения, с чего вы начинаете; они в значительной степени получат то же самое.
источник
Язык может быть объектно-ориентированным, как C ++, Java или C #. И вы можете начать с этих языков. Но дело в том, что даже с этими ОО-языками вы должны сначала изучить процедурное программирование, а затем ООП. Я думаю, вы сделали то же самое с вашим братом.
источник
=
присваивание,if
,for
и т.д.) в более крупные куски (методы), как вы можете надеяться когда - либо понять ООП. Как и в случае с большинством навыков, будучи очень умным, мотивированным и / или имея доступ к инструкции «один на один», вы можете изучать несколько смежных тем одновременно.Процедурное программирование, по крайней мере на языке, подобном C, расширяет возможности программирования до самых простых методов: алгоритмов и структур данных, а также на уровне абстракции, который является удачной средой между понятным для человека исходным кодом и ассемблерным кодом.
Таким образом, студенты могут изучать немного науки (алгоритмы, структуры данных) и немного техники (компиляция источник-> объект-> машина, архитектура фон-Неймана (вероятно)) одновременно.
ООП через C ++ / obj-C вводит шаблон организации кода, который является еще одной вещью для изучения. Это может усложнить изучение приведенных выше понятий.
ООП через Java (среди прочего) идет еще дальше, абстрагируясь от оборудования и среды. Теперь базовый продукт - это не машинный код, а своего рода посредник, который не показывает, как работает базовое оборудование, но в результате он позволяет ученику сосредоточиться на шаблонах организации кода.
В конце концов, я думаю, что это компромисс между изучением того, как работает оборудование, и изучением шаблона организации кода. Что касается того, что более важно, я действительно не знаю. Реальный мир требует знания обоих, по крайней мере, в некоторой степени.
Я собираюсь предположить, что программа бакалавриата, которая начинается с низкоуровневого процедурного программирования, вероятно, производит ученых-компьютерщиков / компьютерных инженеров, а программа, которая начинается с понятий более высокого уровня, производит инженеров-программистов / разработчиков / программистов.
источник
Внутренности объектов ООП состоят из процедурного программирования.
Если вы не можете сделать цикл for, используйте указатели правильно, объявите ваши типы и функции, вы не сможете писать интерфейсы для своих классов, тем более заставляя внутренности делать что-то стоящее.
В любом случае, вы действительно не будете изучать ООП во вводном классе, это будет просто синтаксис - прыгание прямо в ООП усложнит понимание (на первый взгляд), чем уже есть.
ООП не о каком-то объявлении синтаксиса для формирования классов, а о структурах данных, шаблонах проектирования, полиморфизме, наследовании и композиции.
Чтобы делать все эти вещи, вам нужно знать процедурное программирование, что-то, что легко сделать на C. В любом случае вы можете перенести почти все, что вы узнали с C, на Java или C ++, вам, возможно, придется переосмыслить некоторые вещи, которые вы воспринимали как должное в C, НО ... Вы должны знать грамматику (где вы находитесь во вводной части C), чтобы писать предложения (должны писать процедуры для определения интерфейсов), затем параграфы (должны знать структуры данных), а затем знать некоторые шаблоны проектирования (трагедия, комедия, ошибки) герой, как они взаимодействуют и когда их не использовать), прежде чем вы сможете писать полные романы (полная система ООП).
Если бы я тебя , я бы забрать некоторые из следующих книг: Язык программирования C , The Java Programming Language , шаблоны проектирования , Банды четырех и штриховки . Я определенно взял бы копию The C Programming Language, если бы я серьезно относился к C / C ++.
Если вы просто хотите пройти весь путь по Java (и делать это за $), найдите несколько книг о шаблонах проектирования Java и о том, как использовать Java с веб-серверами Apache и Tomcat, а также некоторые книги по программированию баз данных SQL. Java так много задевает в Интернете, извините, но у PHP была история с множеством дыр в безопасности, из-за которой Windows и задница доставляли такую же боль, как и Windows, чтобы не получить рутованный сервер или инъекцию ваших баз данных SQL.
Вы также должны потратить время на изучение SQL, Oracle MySQL Postgresql и MSSQL имеют много общего в отношении синтаксиса, но если мне нужно было просто выбрать изучение одного для себя, я выберу Postgresql только потому, что он лицензирован по BSD, а не по GPL (вы должны посмотреть сравнение и контраст с лицензиями GPL / BSD тоже)
источник
Я должен сказать, что большая часть кода, написанного на объектно-ориентированных языках, таких как Java, на самом деле не является объектно-ориентированной. Трудно действительно понять идеи, лежащие в основе ОО, в результате чего, предположительно, ОО-код действительно в основном процедурный.
Однако в написании процедурного кода на Java нет ничего плохого. Да, у OO есть свои преимущества, но я не хочу путать начинающего программиста. Исходя из этого, я не вижу ничего плохого в обучении Java. Не ожидайте от этого реального ОО, но это работает.
Тем не менее, Java скрывает много низкоуровневых деталей о том, что происходит внутри компьютера. C оставляет их гораздо более открытыми. Можно привести хороший пример того, что студенты должны изучить, как работают эти детали низкого уровня, прежде чем использовать язык, который позаботится об этом для них. Но вы также можете заявить, что вам следует игнорировать эти детали и изучить их позже.
источник
Несколько других уже ответили на эту тему, но я думаю, что стоит заявить об этом более подробно.
Даже если вы начнете изучать программирование с объектно-ориентированного языка, такого как Java, вы начнете с изучения методик процедурного программирования, прежде чем приступите к концепции ОО . При обучении нового программиста Java, вы сначала не знакомите их с объектами и классами, вы вводите их в операторы и переменные. К тому времени, когда ученик может многое узнать об объектах и классах, у него уже есть, по крайней мере, основы процедурного программирования.
Поэтому, по крайней мере, вы должны изучать процедурное программирование на Java, а затем изучать объектно-ориентированное программирование на Java. Независимо от того, проводите ли вы целый год в процедурном программировании или просто проводите первые несколько недель курса программирования, и используете ли вы для этого другой язык, вы просто спорите о деталях.
источник
Чтобы быть чрезмерно откровенным, я думаю, что импульс к этому прибывает прежде всего от старых программистов, желающих в старые времена.
Прежде чем сказать что-то еще, я абсолютно не спорю со старшими программистами, многие из них просто потрясающе опытны. К сожалению, иногда те, кто этого не делают, кто вымылся и никогда не был действительно хорош в программировании с самого начала… становятся профессорами, когда они не могут взломать его в «реальном мире». (Не все профессора тоже ... но ... МНОГО)
ООП - это не священный грааль программирования, а процедурное программирование не является реликвией. Хорошо знать хотя бы некоторые из них, но я думаю, что общая практика преподавания процедурного программирования, как правило, является гигантской тратой времени и усилий. Нам нужно учиться программированию в академических кругах, а не только в том или ином стиле. Я связываю с этим довольно много ужасного кода и неправильных представлений, включая мой собственный.
источник
Две причины для меня: Один OO программирования пришел, чтобы решить проблемы процедурного программирования. Поэтому, написав некоторое процедурное кодирование и затем те же самые вещи в ОО, легче понять разницу.
Здесь также есть дополнительный элемент: два подхода к обучению по темам программирования. Можно начать с минимума (например, сборка, во многих случаях процедурная, некоторые другие начинаются с контуров), а затем идти вверх (в направлении OO / Functional / Managed). Другой подход заключается в том, чтобы начать с физического мира (например, браузера / Windows 7 и т. Д.), А затем начать углубляться. У каждого подхода есть свои плюсы и минусы. Ваш университет выбрал первый и начать с процедурного. Там может быть какое-то обоснование, или они просто скопировали кого-то еще :-).
источник
Нет другой причины, кроме институциональной инерции. Посмотрите на CMU, они выбросили всю свою учебную программу ООП и заменили ее функциональным программированием. Итак, еще раз, ответ на ваш вопрос заключается в том, что это произвольный выбор, сделанный администраторами любой школы, которую вы посещаете. В случае, если кто-то интересуется фактическими утверждениями, которые я сделал здесь, это сообщение об изменении учебного плана в CMU одним профессором / администратором: Обучение FP новичкам .
источник