объектно ориентированное программирование обучение

Объектно-ориентированное программирование для самых маленьких

объектно ориентированное программирование обучение. 2*OT4cQifa4EUhKQPRfhKi1Q. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-2*OT4cQifa4EUhKQPRfhKi1Q. картинка объектно ориентированное программирование обучение. картинка 2*OT4cQifa4EUhKQPRfhKi1Q.

Jul 24, 2018 · 5 min read

объектно ориентированное программирование обучение. 1*MBhQ. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-1*MBhQ. картинка объектно ориентированное программирование обучение. картинка 1*MBhQ.

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

Уверен, вы поняли, что я имею ввиду.

Кем вы видите себя через 5 лет?

Боже, ответ на этот вопрос станет моим главным недостатком.

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

Отвечая на эти вопр о сы, вы должны быть очень осторожны, так как из-за невнимательность вы можете рассказать что-то такое, о чем позже пожалеете.

В сегодняшней статье я хочу разобрать похожий «клишированный» вопрос:

Каковы основные принципы объектно-ориентированного программирования?

Я был по обе стороны стола, когда звучал этот вопрос. Он звучит настолько часто, что не знать ответа на него — просто невозможно.

В 90% случаев его задают новичкам, потому что он помогает разъяснить три вопроса:

объектно ориентированное программирование обучение. 0*sf2tVwPEqKyvv0MU. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-0*sf2tVwPEqKyvv0MU. картинка объектно ориентированное программирование обучение. картинка 0*sf2tVwPEqKyvv0MU.

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

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

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

Инкапсуляция

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

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

Теперь допустим, что мы играем в Sims. У нас есть семья из нескольких людей и кошки. Они общаются друг с другом. Мы хотим применить инкапсуляцию, поэтому инкапсулируем всю логику «cat» в класс Cat. Это выглядит следующим образом:

объектно ориентированное программирование обучение. 0*kj1w3FVpTFBM48HN. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-0*kj1w3FVpTFBM48HN. картинка объектно ориентированное программирование обучение. картинка 0*kj1w3FVpTFBM48HN.

Здесь внутренним состоянием кошки являются частные(private) переменные: настроение(mood), голод(hungry) и энергия(energy). Она также имеет частный(private) метод meow (). Кошка может вызвать его в любой момент, когда захочет, другие классы не могут говорить кошке, когда ей можно мяукать.

То, что им можно делать, определяется в публичных(public) методах sleep (), play () и feed (). Каждый из них каким-то образом влияет на внутреннее состояние кошки и может вызвать meow (). Таким образом, устанавливается связь между внутренним состоянием объекта и публичными методами.

Вот что такое инкапсуляция.

Абстракция

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

Абстракция нацелена на решение этой проблемы.

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

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

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

Хотите еще один пример? Возьмите свой смартфон.

объектно ориентированное программирование обучение. 0*ImAd2w9ilZ1rjj94. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-0*ImAd2w9ilZ1rjj94. картинка объектно ориентированное программирование обучение. картинка 0*ImAd2w9ilZ1rjj94.

Каждый день вы бесчисленное количество раз проводите пальцами по экрану. Что в этот момент происходит внутри смартфона? Рядовому пользователю не нужно это знать, так как ему дан определенный перечень действий для работы с гаджетом.

Наследование

Итак, мы разобрались с двумя принципами ООП, осталось еще два.

Наследование позволяет создать новый класс (производный класс) на основе уже существующего (родительский класс).

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

объектно ориентированное программирование обучение. . объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-. картинка объектно ориентированное программирование обучение. картинка .

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

Полиморфизм

На греческом, полиморфизм означает «многообразие форм».

Мы с вами узнали, что такое наследование, и успешно применяем его на практике. Но возникает одна проблема.

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

Эту проблему можно решить, используя полиморфизм.

Полиморфизм позволяет использовать объекты с одинаковыми характеристиками в разных направлениях.

Общие свойства объектов объединяются в систему, которую могут называть по-разному — интерфейс, класс.

Данный принцип позволяет повысить коэффициент повторного использования кода.

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

объектно ориентированное программирование обучение. 0*wBaegZGDmtAWFQ4. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-0*wBaegZGDmtAWFQ4. картинка объектно ориентированное программирование обучение. картинка 0*wBaegZGDmtAWFQ4.

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

Затем, если потребуется вычислить площадь какого-либо элемента, эта коллекция (список) найдет и выполнит правильный метод. Если элемент является треугольником, выполняется метод CalculateSurface (). Если это круг, выполняется метод CalculateSurface (). И так далее.

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

Надеюсь, мое «детское» объяснение вам помогло. Используйте его при прохождении собеседования и должность, фактически, вам обеспечена!

Что дальше?

Вы готовы к собеседованию, знаете ответ на любой вопрос, рубашка и пиджак поглажены, резюме сто раз перечитано и подкорректировано, но вот незадача — никто не звонит с предложением о работе.

В следующей статье мы поговорим о том, как выделиться из толпы и, что ожидает увидеть работодатель в junior-разработчике.

Источник

ТОП курсов по ООП в Python

О бъектно-ориентированное программирование (ООП) в Python – это подход к разработке, который многими новичками в IT-индустрии воспринимается как нечто сложное и непонятное. Обучение усложняется обилием терминов, сложных объяснений и минимумов практики в традиционных материалах, например, в учебниках.

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

«Основы ООП на Python» от Udemy

объектно ориентированное программирование обучение. param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original. картинка объектно ориентированное программирование обучение. картинка param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original.

объектно ориентированное программирование обучение. param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original. картинка объектно ориентированное программирование обучение. картинка param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original.

объектно ориентированное программирование обучение. param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original. картинка объектно ориентированное программирование обучение. картинка param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original.

Короткий, но полезный курс, в который входят 6 лекций общей длительностью 1 час 7 минут. За это время вы научитесь устанавливать среду разработки для Python 3, создавать классы, работать с конструкторами и деструкторами. Ближе к середине программы и в ее завершении разберетесь в основах ООП. В их числе инкапсуляция, наследование, полиморфизм и переопределение методов.

Обучение рассчитано на новичков в Python и не предъявляет особых требований кроме одного – желания учиться подходу ООП в разработке.

👱 Преподаватель курса – Валерий Жданов – программист с опытом более 20 лет. Владеет языками C# и PHP, Python, Java и рядом других инструментов. Разработал свыше 100 проектов различной сложности с применением ООП.

Цены : 1 090 рублей в рамках ограниченного предложения.

«Python: Введение в ООП» от Хекслет

объектно ориентированное программирование обучение. param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original. картинка объектно ориентированное программирование обучение. картинка param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original.

объектно ориентированное программирование обучение. param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original. картинка объектно ориентированное программирование обучение. картинка param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original.

объектно ориентированное программирование обучение. param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original. картинка объектно ориентированное программирование обучение. картинка param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original.

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

Программа включает 10 уроков:

По завершению теоретического блока программа предлагает 5 практических заданий различного уровня сложности. Также в каждом из 10 уроков есть тесты и упражнения на закрепление знаний.

Цены : доступ к курсу предоставляется в рамках ежемесячной подписки на Хекслет. Доступно три тарифа, каждый из которых открывает доступ к более чем 120 программ обучения. Стоимость самого дешевого плана – 3 900 рублей в месяц, а наиболее продвинутого – 16 900 рублей в месяц.

«ООП и паттерны проектирования в Python» от Coursera

объектно ориентированное программирование обучение. param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original. картинка объектно ориентированное программирование обучение. картинка param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original.

объектно ориентированное программирование обучение. param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original. картинка объектно ориентированное программирование обучение. картинка param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original.

объектно ориентированное программирование обучение. param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original. картинка объектно ориентированное программирование обучение. картинка param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original.

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

На полное прохождение этого курса уйдет около 29 часов. Программа разделена на 4 недели:

📄 По итогам обучения вы получите сертификат, который можно распечатать или разместить в профиле LinkedIn, а также использовать для пополнения своего профессионального портфолио.

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

объектно ориентированное программирование обучение. param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original. картинка объектно ориентированное программирование обучение. картинка param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original.

объектно ориентированное программирование обучение. param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original. картинка объектно ориентированное программирование обучение. картинка param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original.

объектно ориентированное программирование обучение. param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original. картинка объектно ориентированное программирование обучение. картинка param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original.

Курс для людей, которые уже имеют основное представление о разработке на Python и хотят обрести понимание парадигмы объектно-ориентированного программирования, в том числе научиться создавать приложения с применением пактов Kivy, tkinter и PyQT5.

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

Программа курса включает в себя детальное рассмотрение следующих тем:

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

Цена : 22 755 рублей.

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

объектно ориентированное программирование обучение. param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original. картинка объектно ориентированное программирование обучение. картинка param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original.

объектно ориентированное программирование обучение. param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original. картинка объектно ориентированное программирование обучение. картинка param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original.

объектно ориентированное программирование обучение. param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original. картинка объектно ориентированное программирование обучение. картинка param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original.

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

План вебинара поделен на три части:

Продолжительность вебинара составляет всего 2 часа, но этого вполне достаточно для того, чтобы получить общее представление об ООП и понять, насколько это интересная и сложная для вас тема.

«Python. Объектно-ориентированное программирование» от Академии АйТи

объектно ориентированное программирование обучение. param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original. картинка объектно ориентированное программирование обучение. картинка param cfd6d97c c417 44a9 8ed7 3ce5034ec460 original.

объектно ориентированное программирование обучение. param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original. картинка объектно ориентированное программирование обучение. картинка param 98d35415 48c0 40f3 89b3 cfdd6c90e24c original.

объектно ориентированное программирование обучение. param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original. картинка объектно ориентированное программирование обучение. картинка param 805f40ad 3f65 4d62 9d5e 31a4ab77d979 original.

Программа для инженеров-программистов, направленная на формирование ключевых знаний и навыков, которые нужны для объектно-ориентированного программирования на языке Python.

Курс поделен на 8 частей, в каждой из них разбирается отдельная тема с конкретными примерами:

По окончанию курса выпускники получают сертификат, подтверждающий успешное обучение ООП в Python.

💭 Чтобы с прохождением рассматриваемой программы не возникло серьезных затруднений, настоятельно рекомендуется приступать к ней только после предварительного изучения базовых курсов по программированию на языке Python. Без такой подготовки данная программа может показаться слишком сложной, а на ее прохождение уйдет куда больше времени.

Цены : 30 900 рублей для физических лиц, 33 900 рублей для юридических лиц.

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

Источник

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

Привет, Хабр! Меня зовут Владислав Родин. В настоящее время я являюсь руководителем курса «Архитектор высоких нагрузок» в OTUS, а также преподаю на курсах, посвященных архитектуре ПО.

Специально к старту занятий в новом потоке курса «Архитектура и шаблоны проектирования» я подготовил еще один авторский материал.

Введение

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

Вообще устроено все следующим образом: есть само объектно-ориентированное программирование. У него есть принципы. Из принципов объектно-ориентированного программирования следуют разобранные нам шаблоны GRASP (как вариант — SOLID принципы), из которых, в свою очередь, следуют шаблоны GoF. Из них же следует ряд интересных вещей, например, enterprise паттерны.

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

Определение гласит, что «Объектно-ориентированное программирование – это парадигма программирования, в которой основной концепцией является понятие объекта, который отождествляется с предметной областью.»

Таким образом, система представляется в виде набора объектов предметной области, которые взаимодействуют между собой некоторым образом. Каждый объект обладает тремя cоставляющими: идентичность (identity), состояние (state) и поведение (behaviour).

Состояние объекта — это набор всех его полей и их значений.

Поведение объекта — это набор всех методов класса объекта.

Идентичность объекта — это то, что отличает один объект класса от другого объекта класса. С точки зрения Java, именно по идентичности определяется метод equals.

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

Объектно-ориентированное программирование обладает рядом принципов. Представление об их количестве расходится. Кто-то утверждает, что их три (старая школа программистов), кто-то, что их четыре (новая школа программистов):

Инкапсуляция

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

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

Таким образом, получается, что если класс A обращается к полям класса B напрямую, это приводит не к тому, что «нарушается информационная безопасность», а к тому, что класс A завязывается на внутренне устройство класса B, и попытка изменить внутреннее устройство класса B приведет к изменению класса А. Более того, класс A не просто так работает с полями класса B, он работает по некоторой бизнес-логике. То есть логика по работе с состоянием класса В лежит в классе А, и когда мы захотим переиспользовать класс В, это не удастся сделать, ведь без кусочка класса А класс В может быть бесполезным, что приведет к тому, что класс В придется отдавать вместе с классом А. Экстраполируя это на всю систему, получается, что переиспользовать можно будет только всю систему целиком.

Инкапсуляция является самым недооцененным принципом, который, к сожалению, мало кем интерпретируется правильно. Она позволяет минимизировать число связей между классами и подсистемами и, соответственно, упростить независимую реализацию и модификацию классов и подсистем.

Наследование

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

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

Полиморфизм

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

За самым садистским определением кроется возможность языка программирования для декомпозиции задачи и рефакторинга if’ов и switch’ей.

Источник

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

объектно ориентированное программирование обучение. 7ae295877cd95063e180b3c0b78f6563. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-7ae295877cd95063e180b3c0b78f6563. картинка объектно ориентированное программирование обучение. картинка 7ae295877cd95063e180b3c0b78f6563.

Рассказываю об одной из важнейших парадигм в программировании.

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

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

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

Существуют различные типы парадигм, например процедурный, ориентированный на работу с функциями, или логический, подразумевающий решение базовых логических задач в духе «если А = true, то и B = true». Но есть и более интересный подход к решению задач разработки, и это ООП-парадигма.

Что такое ООП?

Объектно-ориентированное программирование, ООП – это одна из парадигм разработки, подразумевающая организацию программного кода, ориентируясь на данные и объекты, а не на функции и логические структуры.

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

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

Структура объектно-ориентированного программирования

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

Объекты

И хотя в структуре ООП объекты находятся не на первом месте, мы начнем с них, так как это упрощает общее понимание парадигмы.

объектно ориентированное программирование обучение. cbbd7112f66758e96bcd02c7a780d2c3e9f482e9. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-cbbd7112f66758e96bcd02c7a780d2c3e9f482e9. картинка объектно ориентированное программирование обучение. картинка cbbd7112f66758e96bcd02c7a780d2c3e9f482e9.

Объект – это кусок кода, описывающий элемент с конкретным набором характеристик и функций. Например, вы делаете видеоигру, в которой есть персонаж. Ваш герой.

Этот персонаж в коде может быть отдельным объектом с такими характеристиками, как здоровье, сила, выносливость, ловкость и урон, а также функциями (методами) – это могут быть магические способности или особые приемы, используемые персонажем.

Объекты могут описывать других персонажей и средства передвижения.

Методы

Методы – это функции, описанные внутри объекта или класса. Они относятся к конкретному объекту и позволяют взаимодействовать с ними или другими частями кода. Выше мы уже затронули «способности» персонажа-объекта, вот они и являются наиболее понятным описанием методов. Когда ваш персонаж выполняет действие в игре, он задействует метод, описанный в его объекте.

Атрибуты

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

Классы

Это наиболее абстрактная и обобщенная форма в ООП. Что-то в духе шаблона, на базе которого строятся другие элементы структуры кода.

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

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

объектно ориентированное программирование обучение. e1886c0b5292ef27e94d3cf19d707853a4aa2173. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-e1886c0b5292ef27e94d3cf19d707853a4aa2173. картинка объектно ориентированное программирование обучение. картинка e1886c0b5292ef27e94d3cf19d707853a4aa2173.

На картинках и схемах эта структура выглядит куда понятнее.

Ключевые принципы ООП

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

Инкапсуляция

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

Данные конкретного объекта или класса хранятся в пределах этого объекта или класса. Вносить в них изменения, используя другие классы, нельзя. У окружения есть право только запрашивать «публичные» методы и атрибуты.

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

Наследование

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

объектно ориентированное программирование обучение. 2eef80166540ac3de608161d680f3138a4a5a521. объектно ориентированное программирование обучение фото. объектно ориентированное программирование обучение-2eef80166540ac3de608161d680f3138a4a5a521. картинка объектно ориентированное программирование обучение. картинка 2eef80166540ac3de608161d680f3138a4a5a521.

Это проще понять на примере со средствами передвижения:

Берем абстрактный класс «Средство передвижения» с возможностью набирать скорость и перевозить людей.

Из него формируем подкласс «Автобус», наследующий базовые характеристики и уточняющий их определенным количеством мест для людей и пределом скорости.

Затем создаем объект «Икарус» с более конкретной скоростью, планировкой, количеством дверей, типом сигнала и другими специфичными параметрами.

Не нужно каждый раз создавать новый класс или объект с полным набором опций. Достаточно воспользоваться конструкцией в духе export class Bus extends Vehicle() и дополнить код конкретикой.

Абстракция

Каждый верхний слой над объектом (классы) более абстрактный, чем его «младшая версия». Это позволяет не переписывать по 10 раз один и тот же объект, указывая одни и те же атрибуты и методы. Напротив, абстрактные классы позволяют создавать все более конкретные классы и вытекающие из них объекты, не описывая реализацию функций заранее (в этом и суть абстракции), а оставляя исключительно базовый шаблон для дальнейших надстроек.

Абстрактный класс должен оставаться публичным и не содержать реализации методов. Этим он отличается от дочерних классов.

Полиморфизм

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

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

Преимущества ООП

Основными преимуществами парадигмы разработчики считают следующие особенности:

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

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

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

Расширяемость: ООП-код легче развивать, дополнять и менять. Этому способствует независимая модульная структура.

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

Безопасность: инкапсулированный код недоступен извне, поэтому «поломать» ООП-программу сложнее.

Гибкость: полиморфизм позволяет быстро адаптировать ООП-код под свои нужды, не описывая новые функции и объекты.

Недостатки ООП

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

Языки, исповедующие объектно-ориентированную парадигму

Существует множество языков программирования, подходящих для применения ООП-парадигмы. Среди них:

Ruby – высокоуровневый язык с динамической типизацией, созданный в середине 90-х японским разработчиком Юкихиро Мацумото.

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

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

Также в число языков с акцентом на ООП-парадигме входят: C#, Python, Java, PHP, JADE, Scala и другие.

Вместо заключения

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *