Light-electric.com

IT Журнал
0 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

C поддерживает процедурное программирование

Для чего хорош Си?

Для чего хорош Си?

    Статьи, 28 февраля 2020 в 16:56

Авторы: Dor Marciano, Мария Багулина

Си применяют в сферах, где важен код, наиболее тесно взаимодействующий с «железом». Под влиянием Си появились языки C++, C#, Java и Objective-C.

Си иногда называют подмножеством C++ или «C++ без классов», но это не совсем верно. Почему это не так, можно узнать в статье про C++.

Си поддерживает исключительно процедурное программирование. Никаких классов, ООП, наследования — только функции и структуры. К основным особенностям языка относятся:

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

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

Оптимизация участков кода на C++

Объектно-ориентированные возможности C++ часто обходятся дороже, чем «чистый Си», так как расходуют больше ресурсов (в частности оперативной памяти). Поэтому иногда код в стиле Си может быть эффективнее. Если нужно заставить какой-либо алгоритм работать быстрее — используйте процедурный стиль и откажитесь от встроенных инструментов C++ для ООП, например от полиморфизма.

Но если нужна действительно высокая скорость, лучше переписать часть кода на ассемблере.

Информационная безопасность

Сюда относятся сложные хакерские приёмы. Среди них:

  • Использование уязвимостей: переполнения буфера, двойные удаления (повреждения кучи).
  • Инъекция (сокрытие) кода. Если получить доступ к другому процессу, используя уязвимость, то можно спрятать свой код внутри чужого и заставить процесс выполнять его. Теперь скрытый код будет жить в «невинном» процессе, спрятанном от глаз пользователя.
  • Перехват (hooking). Если вы хотите мониторить чьи-то взаимодействия с системой (нажатие клавиш, открытие файлов), вам, как правило, нужно вызывать отслеживающий код всякий раз, когда пользователь что-то делает. Для этого вы заменяете какой-либо фрагмент API операционной системы вашим кодом.

Почти для всех этих применений используется PIC код (position-independent code — код, не зависящий от адреса). Он может выполняться в любом месте памяти, независимо от того, где находится и кто его запустил. У PIC-кода нет доступа к глобальным переменным и таблицам, поэтому C++ для его написания не подойдёт (классам C++ нужны глобальные таблицы для реализации наследования).

Код ядра

Код, который выполняется в режиме ядра (kernel mode) имеет полный доступ к памяти и оборудованию: RAM, GPU, жёсткому диску. В режиме ядра работают:

  • Аппаратные драйверы — здесь без доступа к железу не обойтись. Драйверы являются посредниками между пользовательским кодом (не в режиме ядра) и оборудованием.
  • Ядро операционной системы. На Си, кстати, написано множество ядер ОС, в том числе Unix и Android.

Использовать для всего этого код на C++ почти невозможно, поскольку в режиме ядра нет доступа к тем же глобальным таблицам, о которых говорилось выше. Иногда в режиме ядра тоже необходим PIC код — например для загрузчика (bootloader). Загрузчик — самая первая программа, выполняющаяся при запуске ПК. Биос извлекает её из жёсткого диска, помещает в память и говорит процессору запустить эту часть памяти.

Embedded-разработка

Для программирования встраиваемых систем часто используется как Си, так и C++. Но Си имеет преимущество, поскольку позволяет разрабатывать встроенное ПО при ограниченных ресурсах — например когда у микроконтроллера очень мало RAM. Помимо Си также может пригодиться знание ассемблера (как вариант, ARM-ассемблера) для написания ассемблерных вставок, чтобы ещё больше оптимизировать код и получить доступ к специфичным инструкциям процессора.

C++ и не только

Страницы

среда, 11 декабря 2013 г.

Парадигмы программирования в C++

Парадигмы программирования и их поддержка в разных языках программирования

Парадигма программирования — это стиль написания программ, который подчиняется определенным идеям и правилам.

Объектно-ориентированное программирование является техникой программирования — парадигмой для написания «хороших» программ, решающих различные задачи. Если термин «объектно-ориентированный язык программирования» вообще что-либо означает, он должен означать язык программирования, который предоставляетудобные механизмы поддержки объектно-ориентированного стиля программирования.

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

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

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

  1. Все средства должны быть встроены в язык понятным и элегантным образом.
  2. Должна существовать возможность комбинирования средств для решения задач, которые в противном случае потребовали бы дополнительных, отдельных средств.
  3. Должно быть как можно меньше неестественных средств «специального назначения».
  4. Реализация средства не должна приводить к значительным накладным расходам в не использующих его программах.
  5. Пользователь не обязан знать ничего, кроме того подмножества языка, которое он явно применяет при написании программы.

Первый принцип апеллирует к эстетике и логике, два следующих отражают концепцию минимализма, а два последних могут быть сформулированы так: «то что вам не нужно, не должно мешать».

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

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

Читать еще:  Уроки программирования на языке си

Парадигмы программирования в C++

Процедурное программирование

Модульное программирование

Парадигмой программирования становится:
Реши, какие требуются модули;разбей программу так, чтобы скрыть данные в модулях. Эта парадигма также известна как «принцип сокрытия данных».

С++ предоставляет механизм группировки связанных данных, функций и т. д. в пространства имен (namespace).

Так как данные — это только часть того, что хочется «спрятать», понятие «сокрытие данных» тривиальным образом расширяется до понятия «сокрытие информации». А именно, имена переменных, констант, функций и типов также могут быть сделаны локальными в модуле. Соответственно, С++ позволяет поместить любое объявление в пространство имен.

Абстракция данных

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

С++ стремится решить задачу, позволяя пользователю непосредственно определять типы, которые ведут себя (почти) также, как и встроенные. Такой тип часто называютабстрактным типом данных. Я предпочитаю термин тип, определяемый пользователем (пользовательский тип). Достаточно точное определение абстрактного типа данных потребовало бы «абстрактной» математической формулировки. При ее наличии то, что здесь называется типами, служило бы конкретными примерами таких истинно абстрактных сущностей. Парадигма программирования становится такой:

Объектно-ориентированное программирование

Если рассматривать сущность фигуры Shape и сущность окружности Circle, то можно сделать вывод, что эти сущности обладают общими свойствами: цвет, возможность отрисовки и т.п. И что окружность является частным случаем фигуры Shape, как например квадрат, прямоугольник, треугольник и т.д. При этом Circle обладает своими отличительными свойствами (радиус), сохраняя общие (такие как цвет).

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

Реши, какие требуются классы;обеспечь полный набор операций для каждого класса;явно вырази общность через наследование. В тех случаях, когда такой общности нет, достаточно абстракции данных. Степень общности между типами, которую можно выделить, использовав наследование и виртуальные функции, является лакмусовой бумажкой для определения, применим ли объектно-ориентированный подход к данной задаче. В некоторых областях, таких как интерактивная графика, очевидно, что объектно-ориентированное программирование весьма полезно. В других задачах, таких как классические арифметические типы и вычисления, основанные на них, похоже, трудно найти применение чему-то большему, чем абстракция данных, а средства, необходимые для поддержки объектно-ориентированного программирования, выглядят бесполезными.

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

Обобщенное программирование

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

Парадигма программирования для этого стиля звучит та к:

Итоги

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

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

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

Процедурное программирование и ООП

Здравствуйте , помогите понять разницу между ПП и ООП. В интернете много написано , но конкретики и примеров не хватает. Есть простой код который считает объемы фигур , подскажите как он будет выглядеть в виде ПП и ООП.

Процедурное программирование: Телефонная книга
Написать программу, которая создаст файл phone.txt с информацией с данными: фамилия и номер .

Программа «калькулятор» через процедурное программирование
Добрый день ! Я написал программу "Калькулятор", в которой можно в строку ввести выражение и будет.

Программирование ООП=)Друзья .просмотрите код! IDE-C++bUIDER
И так друзья пытаюсь све старое консольное приложение переделпть в оконное, но увы ничего не.

Процедурное программирование
Добрый день. Пишу реферат по процедурным языкам программирования. Не могу найти литературу по тем.

Решение

А вы читали про классы?
Разница такова, что при процедурном программировании, у вас все переменные хранятся в главной функции и вы их параметрами передаете в другие функции (процедуры), а при программировании в ООП, т.е. на классах, вы большую часть переменных заносите в класс, и они уже называются «свойства», и так же все связанные с этими переменными функции вы помещаете в этот класс, и они уже называются методы. В таком случае, вам не нужно передавать эти переменные через параметры в функции и вы обосабливаете все что связано с каким-то объектом в отдельный модуль.
Ну это если на пальцах

Читать еще:  Язык программирования c команды

Добавлено через 3 минуты

Ну это время займет, надо написать две версии программы и так, что бы разница была очевидной, и самое главное, понятной Я не преподаватель, может у кого лучше получится

Добавлено через 11 минут
Процедурное. Я специально ни чего не стал менять в вашем коде, чтобы была понятна разница:

Я не учу, я пытаюсь показать разницу человеку, который даже не знаком с функциями, и сделать это наглядно.
Если Вы считаете что можете сделать это лучше, я буду только рад, и у вас этому тоже поучусь!

Добавлено через 33 секунды
vlisp, А что так сильно вас смутило в моем коде?

Avaddon74, спасибо за объяснение , теперь все более менее встало на свои места . ПП пишется функциями , а ООП классами и методами в них

Добавлено через 1 минуту
vlisp, мне тоже было бы интересно узнать , что не так в данном примере ? все доходчиво и на пальцах понятно.

да все. функции должны быть утилитарными, а у вас они одноразовые.
с объектами еще хуже. зачем вы их создаете там, где не надо? тут вам не паскаль.

В общем у вас все как в доме обломова. все смешалось: кони, люди.

НО! Именно как правильно вы написали между делом. значит и с ООП знаете, как разобраться, но показываете чепуху. А они мотают на ус.

Впрочем. Если б я учился на форумах, я бы тоже никогда ничему не научился

Добавлено через 4 минуты

как писать процедурно см. 2 код из #4. Как писать объектно. см. #3

чтоб понять что не так, из первого кода в #2 убери все, кроме main и попробуй понять смысл

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

Хоть я и не преподаватель, но у меня есть дети и даже я понимаю, что начинать объяснение нужно с основ, которые не всегда являются истиной, так как правильно, основы — это наглядный пример, чтоб заметить разницу. Вы же не учите рисовать ребенка сову сразу с мелкими деталями, с правильным освещением, передавать глубину рисунка?! Вы начинаете рисование с окружности, и с каждым разом усложняете объект. И сова у вас не в натуральную величину, и раскрашена она иными цветами, это не значит что это не правильно, это нормально!

В первом коде я специально ни чего не стал менять, а только разбил код на подпрограммы, названия я умышленно поставил такие, чтобы подчеркнуть, что это разные функции. Вы видели в книгах названия первых функций? разве foo несет какой-то смысл? Во втором примере я уже углубился в детали, сразу ввел осмысленное название, показать что именно так нужно делать и что названия можно придумывать самому, добавил пару параметров, показать что несколько можно передавать, добавил возвращаемое значение, и добавил объявление внутренней переменной, и в саму функцию уже вложил смысл.

В третьем кода, я пытался реализовать класс максимально простым и понятным, сразу добавил и закрытые методы и открытые, показал где какие используются и приблизительно правильный порядок вызова, т.е. calc нужно делать закрытым и вызывать его обязательно после изменения свойств объекта и т.д. Углубляться во все мелочи сейчас глупо, т.к. человеку нужно осознать разницу, почерк к нему придет со временем.

Чем отличается C от C++

Корот­кий ответ: C++ — это улуч­шен­ный C. У этих язы­ков оди­на­ко­вый на 99% син­так­сис и коман­ды, но C — это боль­ше про струк­тур­ное и про­це­дур­ное про­грам­ми­ро­ва­ние, а C++ — про объ­ект­но ори­ен­ти­ро­ван­ное.

C — язык, кото­рый сде­лал в 1973 году Ден­нис Рит­чи. Глав­ная цель язы­ка — ско­рость, быст­ро­дей­ствие и уни­вер­саль­ность. Язык изна­чаль­но про­ек­ти­ро­вал­ся как систем­ный, что­бы на нём мож­но было писать код для про­цес­со­ров, драй­ве­ров и созда­вать на нём опе­ра­ци­он­ные систе­мы. В то вре­мя боль­шин­ство этих вещей дела­ли на ассем­бле­ре, и Рит­чи хотел это упро­стить.

C++ при­ду­мал Бьёрн Стра­уструп в нача­ле вось­ми­де­ся­тых, когда ему не хва­та­ло воз­мож­но­стей стан­дарт­но­го C. Он сде­лал язык более стро­гим, доба­вил в него клас­сы, ООП-подход и пере­груз­ку опе­ра­то­ров, сохра­нив ско­рость ори­ги­наль­но­го С. В 1983 году Бьёрн пере­име­но­вал язык из «C с клас­са­ми» в C++.

О пере­груз­ке опе­ра­то­ров как-нибудь в дру­гой раз

Код чита­ет­ся про­ще

Про­ще пор­ти­ро­вать код на дру­гие плат­фор­мы

Есть струк­ту­ры и пере­мен­ные типа «струк­ту­ра»

Насле­до­ва­ние — это струк­ту­ра внут­ри струк­ту­ры

void — обя­за­тель­ное сло­во

Мож­но объ­яв­лять гло­баль­ную пере­мен­ную несколь­ко раз

Исклю­че­ния нуж­но кон­стру­и­ро­вать само­му

Нет пере­груз­ки опе­ра­то­ров

Почти всё стан­дарт­но и пред­ска­зу­е­мо

Для чего изучать

C — клас­си­че­ский язык раз­ра­бот­ки систем­но­го ПО и любо­го соф­та для мик­ро­про­цес­со­ров. На нём напи­са­ны Linux, боль­шая часть Windows и MacOS. Если взять любой совре­мен­ный носи­мый гад­жет или элек­трон­ное устрой­ство, в боль­шин­стве слу­ча­ев они рабо­та­ют тоже под управ­ле­ни­ем про­грам­мы на C. В мире огром­ное коли­че­ство кода, кото­рый напи­сан на C (и ещё столь­ко же будет напи­са­но), поэто­му про­блем с рабо­той у C-программистов не пред­ви­дит­ся.

C++ — выбор тех, кому одно­вре­мен­но нуж­на вся мощь C и гиб­кость объ­ект­но ори­ен­ти­ро­ван­но­го про­грам­ми­ро­ва­ния. Counter-Strike, StarCraft и World of Warcraft напи­са­ны на C++, а это зна­чит, что мож­но соче­тать про­из­во­ди­тель­ность C и совре­мен­ные тех­но­ло­гии. Часть движ­ка Unity тоже напи­са­на на C++, что­бы полу­чить пря­мой доступ к памя­ти и ресур­сам систе­мы.

На самом деле нет такой уж боль­шой раз­ни­цы меж­ду C и C++. Это оди­на­ко­во мощ­ные и быст­рые язы­ки, про­сто у них раз­ная область при­ме­не­ния и стиль про­грам­ми­ро­ва­ния.

Если вам важ­на ско­рость, про­из­во­ди­тель­ность и отно­си­тель­ная про­сто­та язы­ка — смот­ри­те на C, там это всё есть. С дру­гой сто­ро­ны, из-за про­сто­ты в нём мно­гие вещи при­дёт­ся делать вруч­ную — обра­ба­ты­вать исклю­че­ния, сле­дить за сро­ком жиз­ни пере­мен­ных и струк­тур или писать допол­ни­тель­ный код.

Сто­рон­ни­кам ООП боль­ше подой­дёт C++ — в нём уже есть всё, что нуж­но для рабо­ты с объ­ек­та­ми, обла­стя­ми види­мо­сти и про­чим доб­ром. Ино­гда такой код слож­нее под­дер­жи­вать и он может рабо­тать на несколь­ко про­цен­тов мед­лен­нее, чем на C, но в нём есть та сво­бо­да, кото­рой нет в ори­ги­наль­ном язы­ке. Та же пере­груз­ка опе­ра­то­ров — уди­ви­тель­но мощ­ная вещь в уме­лых руках, кото­рая может сэко­но­мить мно­го вре­ме­ни и ресур­сов.

Читать еще:  Вин 10 вход в безопасный режим

Что­бы было понят­нее, ско­ро напи­шем подроб­но про оба язы­ка. А вы не болей­те и бере­ги­те себя.

Процедурное программирование против объектно-ориентированного

Пожалуй, каждый, кто хоть немного интересуется программированием, знает, что при разработке ПО и web-приложений используются 2 основных подхода – процедурный и объектно-ориентированный. Сразу скажем, что ни один из них не является хорошим или плохим. Это – разные способы организации кода, разные способы решения задач. Да и задачи, собственно говоря, они решают тоже разные.

Чем же отличается ПП от ООП? Какие преимущества и недостатки они имеют? И, наконец, какой из этих подходов следует изучать начинающему программисту?

Различия между процедурным и объектно-ориентированным программированием

Представь: тебе нужно написать небольшую программку, которая запрашивает у пользователя слово, считает количество символов в нем и выводит результат на экран (уже страшно, правда? ;-)).

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

Все эти подзадачи называются процедурами. При работе в процедурном ЯП разработчик разбивает общую задачу на более мелкие и выбирает языковые конструкции для их реализации. Этими конструкциями являются ветвления, циклы, функции и другие структурные операторы.

А теперь другой пример. Допустим, ты продаешь автомобили (респект!). Каждую новую машину, предназначенную для продажи, ты вносишь в каталог через специальную форму на сайте. Форма содержит следующие поля:

  • Марка авто
  • Модель авто
  • Мощность двигателя
  • Цвет
  • Год выпуска

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

Но как быть, если кроме легковых машин, в каталоге находятся, например, тракторы? Да, они, как и автомобиль, имеют марку, модель, показатель мощности, но в то же время отличаются некоторыми другими характеристиками, например, тяговым усилием. У обычного автомобиля такой пункт в техпаспорте отсутствует.

Какой подход выберет программист в этом случае? Безусловно, объектно-ориентированный. Работа сведется к следующему: создается базовый класс “Техника”, в котором будут храниться характеристики, общие и для легковых авто, и для тракторов. Затем создаются два объекта – “Легковой автомобиль” и “Трактор”, которые наследуют все характеристики из класса “Техника”, а затем дополняются уникальными данными – тем самым “тяговым усилием” и пр.

Таким образом, в основе объектно-ориентированного программирования лежит понятие “объект”. Иначе их называют экземпляры класса, и это вполне логично, учитывая, что они многое наследуют у класса. Кстати, наследование – это один из главных принципов ООП, наряду с полиморфизмом и инкапсуляцией. Но это уже совсем другая история.

Преимущества и недостатки процедурного программирования

Увы, все в этом мире имеет свои минусы и плюсы. Среди недостатков ПП можно назвать следующие:

  • Риск возникновения множества ошибок при работе над большим проектом. Приходится писать много процедур, и это не может не сказаться на чистоте и работоспособности кода.
  • Все данные процедуры доступны только внутри нее. Их нельзя вызвать из другого места программы и при необходимости придется писать аналогичный код. А это уже противоречит одному из основополагающих принципов программирования, который звучит как Don’t Repeat Yourself (Не повторяйся).
  • Сложность изучения для начинающих. Этот недостаток может кому-то показаться притянутым за уши, но простая статистика свидетельствует, что процедурное программирование для большинства новичков дается сложнее, чем объектно-ориентированное.

Впрочем, у ПП есть и свои преимущества. Среди них отметим:

  • Любая процедура (функция) может быть вызвана неограниченное количество раз. Все как в жизни – ты один раз “написал” в голове маршрут к любимой пиццерии, а затем просто вызываешь эту “программу” из памяти.
  • Возможность оперативно решить задачу, в которой отсутствует сложная иерархия. Можно пойти дальше и сказать: если проект не подразумевает создания большого количества классов и объектов, то в ПП совсем нет минусов.

Преимущества и недостатки объектно-ориентированного программирования

Главным минусом использования ООП можно назвать громоздкость при решении простых задач. Сравни, например, два участка кода, написанного на PHP. Первый пример – процедурный код, второй – объектно-ориентированный. И тот, и другой скрипт ведут к одному результату: просто выводят на экран фразу “Hello, world”:

Скрипт №1

print “Hello, world.”;

Скрипт №2

class helloWorld <
function myPrint() <
print “Hello, world.”;
>
>
$myHelloWorld = new helloWorld();
$myHelloWorld->myPrint();

Показательно, не правда ли?

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

Кроме того, объектно-ориентированные языки программирования легче изучаются новичками. Взгляни на диаграмму – она отражает результаты анкетирования студентов, которые познакомились с обоими подходами к разработке. Как видно, большинство из них выбрало именно ООП для более детального изучения.

Подводим итоги

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

Помни: язык – это всего лишь инструмент. Он не должен управлять программистом так же, как хвост не может вилять котом. Если же это происходит, то виноват кот программист, но не хвост, ведь так?

При реализации того или иного проекта разработчик сам решает, как он будет реализован. Если перед тобой стоит серьезная задача, и ты понимаешь, что без классов и объектов здесь не обойтись – выбирай ОО-язык. К ним относятся Delphi, Java, C#, JavaScript.

Если же задача довольно проста и ты четко видишь пошаговый алгоритм ее решения, то твоя стихия – это процедурное программирование. К процедурным языкам относятся Basic, Pascal, C.

Кроме того, существуют ЯП, которые поддерживают обе парадигмы организации кода – PHP, C++. К ним мы питаем особую слабость :-).

И последнее: в Академии мы изучаем и процедурное, и объектно-ориентированное программирование. Хочешь стать одним из нас? Занимай свое место в группе!

Ссылка на основную публикацию
Adblock
detector