2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу 1, 2, 3, 4  След.
 
 Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение07.06.2010, 15:46 
Аватара пользователя


01/04/10
910
Привет.

Сам когда изучал программирование столкнулся с такой темой как ООП, которую впихивали везде в литературе для новичков. Моё понимание программирования становилось очень мутным ещё на этапе изучения из-за того, что сразу начинал с ООП. К счастью, я свернул с этого пути и перешёл на процедурное программирование (в частности на язык C). И теперь имея небольшой багаж процедурного программирования и подробного изучения ПО написанного на C (apache, nginx), я могу адекватно начать изучать ООП без вреда для психики и оценить зачем оно нужно и где лучше применять. Так же встречал новичков, которые даже в малюсеньких программках создовали неуклюжие классы.

Отсюда возникает вопрос, зачем бедным новичкам с самого начала впаривают ООП (особенно тем которым довелось изучать программирование под Windows)?

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение07.06.2010, 15:57 
Заслуженный участник
Аватара пользователя


03/06/09
1497
creative в сообщении #328674 писал(а):
с самого начала впаривают ООП

Потому что это модно и популярно.

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение07.06.2010, 18:59 


24/05/09

2054
Оператор "goto" тоже в опале...

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение07.06.2010, 19:22 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
Alexu007 в сообщении #328753 писал(а):
Оператор "goto" тоже в опале...

Ну, это ещё с 1970-ых годов идёт...

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение07.06.2010, 21:14 
Аватара пользователя


01/04/10
910
Alexu007 в сообщении #328753 писал(а):
Оператор "goto" тоже в опале...


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

Если моё объяснение использование оператора goto слишком пространно, то можно почитать исходный код nginx, там этот оператор встречается относительно часто, но в достаточно предсказуемых местах.

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение07.06.2010, 21:21 
Заслуженный участник
Аватара пользователя


30/01/09
6704
Эйлер в таких случаях говорил: "Читайте. Понимание придёт потом".
Цитата:
Отсюда возникает вопрос, зачем бедным новичкам с самого начала впаривают ООП (особенно тем которым довелось изучать программирование под Windows)?
. После того, как Вы напишите на С программу под Windows, вопросы отпадут. Но программированию можно (и правильнее) начинать учиться в школе не под Windows. Например, для ДОС-окна (если это так называется).

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение07.06.2010, 22:03 


24/05/09

2054
мат-ламер в сообщении #328835 писал(а):
После того, как Вы напишите на С программу под Windows, вопросы отпадут. Но программированию можно (и правильнее) начинать учиться в школе не под Windows. Например, для ДОС-окна (если это так называется).

Писать программы для DOS в эпоху Windows - тоска зеленая. Но можно совмещать, например с помощью C++ Builder: элементы оформления - кнопки, меню и т.д. - объекты (написанные другими программистами), а обработка событий - собственно программа - старые добрые функции.

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение08.06.2010, 00:02 
Заслуженный участник


09/08/09
3438
С.Петербург
Alexu007 в сообщении #328857 писал(а):
Писать программы для DOS в эпоху Windows - тоска зеленая.
Насколько я понимаю, мат-ламер имел в виду вовсе не программы под DOS, а программы работающие из командной строки, которые существовали, существуют и будут существовать. И учиться программированию на таких программах действительно правильнее, ибо нет необходимости разбираться в сложных фрейморках и разных мульках, имеющих к собственно программированию весьма косвенное отношение.

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

creative в сообщении #328674 писал(а):
И теперь имея небольшой багаж процедурного программирования и подробного изучения ПО написанного на C (apache, nginx), я могу адекватно начать изучать ООП без вреда для психики и оценить зачем оно нужно и где лучше применять.
Думаю, лет через пять программирования с использованием ООП Ваше мнение о том, в каком порядке следовало строить обучение, изменится. А при чём тут вред для психики, я вообще не понял.

creative в сообщении #328674 писал(а):
Так же встречал новичков, которые даже в малюсеньких программках создовали неуклюжие классы.
А Вы думаете, Ваша первая ООП-программа будет иметь идеальный дизайн? Стиль и чувство меры приходят только с опытом, другого пути нет.

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение08.06.2010, 10:38 
Аватара пользователя


01/04/10
910
Maslov в сообщении #328926 писал(а):
Alexu007 в сообщении #328857 писал(а):
Писать программы для DOS в эпоху Windows - тоска зеленая.
Насколько я понимаю, мат-ламер имел в виду вовсе не программы под DOS, а программы работающие из командной строки, которые существовали, существуют и будут существовать. И учиться программированию на таких программах действительно правильнее, ибо нет необходимости разбираться в сложных фрейморках и разных мульках, имеющих к собственно программированию весьма косвенное отношение.


+1 Обычно те кто с самого начала заморачиваются на ляпании формочек достаточно слабо понимают саму семантику и синтаксис языка (я встречал таких людей).

Maslov в сообщении #328926 писал(а):
Думаю, лет через пять программирования с использованием ООП Ваше мнение о том, в каком порядке следовало строить обучение, изменится. А при чём тут вред для психики, я вообще не понял.


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

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

Maslov в сообщении #328926 писал(а):
А Вы думаете, Ваша первая ООП-программа будет иметь идеальный дизайн? Стиль и чувство меры приходят только с опытом, другого пути нет.


Так на простом языке проще научится же.

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение08.06.2010, 10:51 
Супермодератор
Аватара пользователя


29/07/05
8248
Москва
Если речь идет об обучении программированию где-то в учебном заведении, то не забывайте об ограниченности учебных часов. Бывает так, что перед разработчиками программы может стоять выбор: либо учить этому сразу, либо выбрасывать из программы совсем. И они думают - что это будет за учебная программа без ООП?

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

Сам я изучал ООП по книге Шилдта "Самоучитель C++". Там только C++, и она рассчитана как раз на тех, кто с функциональным программированием (C) уже знаком. так что и такие тоже бывают. Ну а желающие впарить "все в одном" все равно будут всегда. Мне тоже кажется, что мешать все в одну кучу неправильно.

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение08.06.2010, 11:56 
Аватара пользователя


01/04/10
910
PAV в сообщении #329015 писал(а):
А новичок может взять в руки книгу, увидит, что в ней ООП нет, и решит, что это что-то для полных чайников, "некрутое" и "несовременное".


Лет пять назад и я так думал :D

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение08.06.2010, 12:09 
Заслуженный участник


09/08/09
3438
С.Петербург
creative в сообщении #329013 писал(а):
Так на простом языке проще научится же.
А почему Вы думаете, что объектно-ориентированные языки сложнее процедурно-ориентированных? На мой взгляд, Java и C# ничуть не сложнее C, а в некоторых отношения даже существенно проще:
- нет указателей
- нет проблем с явным освобождением памяти
- не надо вникать в особенности внутреннего представления данных
- сообщения о большинстве ошибок на стадии выполнения носят содержательный характер (не "Access violation", а "Array index out of bounds").

creative в сообщении #329013 писал(а):
Я думаю всё таки правильней изучать в историческом порядке (хотя бы отчасти).
Тогда начинайте с машинных кодов, вводимых с пульта. Потом ассемблер, фортран, кобол, PL/I, алгол 60/68 ...

PAV в сообщении #329015 писал(а):
Если речь идет об обучении программированию где-то в учебном заведении, то не забывайте об ограниченности учебных часов. Бывает так, что перед разработчиками программы может стоять выбор: либо учить этому сразу, либо выбрасывать из программы совсем. И они думают - что это будет за учебная программа без ООП?
Тут есть ещё один чисто практический момент: современные языки программирования или объёктно-ориентированные, или функциональные (в общепринятом смысле этого слова). Поэтому вопрос стоит так: или включать в программу современные языки (и, следовательно, ООП), или ограничиться C/Pascal.

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение08.06.2010, 14:17 
Аватара пользователя


01/04/10
910
Maslov в сообщении #329040 писал(а):
А почему Вы думаете, что объектно-ориентированные языки сложнее процедурно-ориентированных? На мой взгляд, Java и C# ничуть не сложнее C, а в некоторых отношения даже существенно проще:
- нет указателей
- нет проблем с явным освобождением памяти
- не надо вникать в особенности внутреннего представления данных
- сообщения о большинстве ошибок на стадии выполнения носят содержательный характер (не "Access violation", а "Array index out of bounds").


Они может и не сложнее, но концептуально представляют другой уровень. То есть насущно осознать класс можно только прочувствовав необходимость в нём. То есть понимание тем глубже, чем почти самостоятельно приходишь к этим концепциям. Почему почти самостоятельно, а не самостоятельно? Потому, что знать об их существовании нужно, а не изобретать в нуля, но приходить к ним нужно самостоятельно.
Да и знание машинного представления даст большее качество даже при программировании на высокоуровневом языке. А то знаю я таких PHP-программистов, которые умудряются писать код, который при одном запросе вешает четырёх-ядерный процессор. Шли бы с самого начала не писали бы такое. Я не против PHP, я за то, чтобы люди которые пишут на нём знали основы.

Maslov в сообщении #329040 писал(а):
creative в сообщении #329013 писал(а):
Я думаю всё таки правильней изучать в историческом порядке (хотя бы отчасти).
Тогда начинайте с машинных кодов, вводимых с пульта. Потом ассемблер, фортран, кобол, PL/I, алгол 60/68 ...


Ну вообще-то примерно так я и начинал, писал в школьные годы програмки на ассемблере под Z80 процессор :-)

PAV в сообщении #329015 писал(а):
Тут есть ещё один чисто практический момент: современные языки программирования или объёктно-ориентированные, или функциональные (в общепринятом смысле этого слова). Поэтому вопрос стоит так: или включать в программу современные языки (и, следовательно, ООП), или ограничиться C/Pascal.


А чем C не современен? :) Почти весь OpenSource написан на нём. ООП можно давать человеку, который уже начинает задаваться вопросами сокрытия данных, объединения функций не просто по файлам, а в какую-то семантическую сущность.

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение08.06.2010, 17:37 
Заморожен
Аватара пользователя


18/12/07
8774
Новосибирск
Я в программировании мало что рублю, но топикстартера поддерживаю. Странно как-то изучать литературу, не выучив алфавит...

 Профиль  
                  
 
 Re: Зачем новичкам впаривают ООП, а не процедурного прог-ния?
Сообщение08.06.2010, 18:29 
Заслуженный участник


09/08/09
3438
С.Петербург
creative в сообщении #329073 писал(а):
Они может и не сложнее, но концептуально представляют другой уровень. То есть насущно осознать класс можно только прочувствовав необходимость в нём. То есть понимание тем глубже, чем почти самостоятельно приходишь к этим концепциям.
Это уж как сложится. Многие всю жизнь пишут на чистом С и так и не приходят к осознанию преимуществ ООП для определённых задач. Если есть впереди свободных лет 5, то почему бы и не попробовать. Только на работу надо устраиваться сразу после института, а с профессиональной точки зрения, программисту, владеющему C++/Java/C# существенно проще найти себе "коммерческое применение", чем программисту, знающему только C/Pascal.

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 50 ]  На страницу 1, 2, 3, 4  След.

Модератор: Модераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group