Объектно-ориентированное программирование — студенческий портал

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

Методы являются аналогами функций (возвращают значение) и процедур (не возвращают), но с той разницей, что они являются частью какого-то класса. Например, можно в классе Character создать метод Move (), который будет отвечать за движение персонажа.

public void Move(string direction)
{ switch (direction) { case «forward»: this.x++; break; case «backward»: this.x—; break; case «up»: this.y++; break; case «down»: this.y—; break;
}
}

Сначала указывается уровень доступа public, затем тип возвращаемого значения (в данном случае используется void, что говорит компилятору о том, что ничего возвращать не нужно). Затем идет название метода и круглые скобки.

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

Character hero = new Character(); string command = string.Empty; while (command != «exit»)
{ Console.WriteLine($»You are at {hero.Coordinates}. Where to go?»); command = Console.ReadLine();

hero.Move(command);
}

Пользователь видит свои координаты и вводит направление движения, а персонаж двигается с помощью метода Move (). Всё это повторяется, пока не будет введена команда exit.

Вот как это выглядит:

Объектно-ориентированное программирование - Студенческий портал

  1. Если же нужно, чтобы метод что-то возвращал, то указывается его тип и используется оператор return:

public bool Collide(Character ch)
{ if (ch.X == this.x && ch.Y == this.y) { return true; } else { return false;
}
}

Этот метод принимает в качестве аргумента объект класса Character и сравнивает координаты. Если они равны, то метод возвращает значение true, а иначе — false.

Вот как это можно использовать:

Character hero = new Character(); Character npc = new Character(); bool collide = hero.Collide(npc); if (collide)
{ Console.WriteLine(«Objects are on the same position.»);
}
else
{ Console.WriteLine(«Objects are not on the same position.»);
} Console.ReadKey();

  • Приведенная выше программа сравнит координаты двух объектов и выведет результат. Так как объекты создаются с одинаковыми полями, то они будут равны:

Объектно-ориентированное программирование - Студенческий портал

Источник: https://skillbox.ru/media/code/oop_chast_1_chto_takoe_klassy_i_obekty/

Бесплатный курс «Объектно-ориентированное программирование»

Объектно-ориентированное программирование - Студенческий портал

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

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

Это как?

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

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

Для прохождения нового бесплатного курса по ООП понадобится:

  1. Среда разработки. В качестве неё возьмем Visual Studio Community с официального сайта. Эта версия программы бесплатна, поэтому просто качаем ее и устанавливаем к себе на ПК.
  2. Система контроля версий. Берём Git. Для облегчения работы с Git посмотрите курс «Git. Быстрый старт».

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

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

Основные понятия в объектно-ориентированном программировании – это объекты и классы.

Основные принципы – наследование, полиморфизм, инкапсуляция и абстракция.  

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

В течение всего курса вы будете разрабатывать конкретный продукт – игру «Змейка». Для написания её вы будете использовать язык С#. Большой плюс состоит в том, что даже если вы изучаете другой язык программирования – ничего страшного, ведь принципы ООП для любого языка одинаковы.

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

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

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

Пройдёмся по классам стандартных библиотек С#, изучим наследование —  свойство объектов порождать потомков, которое обеспечивает ООП значительную гибкость. Изучая всё это на примерах, вы незаметно для себя будете учиться писать красивый и компактный код, при этом собственными руками создавая при этом игру.

Вопросы преподавателю:  

 Почему именно «Змейка»?

 — На «Змейку» меня вдохновила моя жена. Мы вместе учились на факультете ВМиК МГУ, и данная программа была домашним заданием. Супруга напомнила мне, насколько это было круто и увлекательно, писать свою собственную игрушку.

Тогда я написал программу кое-как, несмотря на то, что она работала. Только спустя годы работы программистом я понял, как можно написать ИДЕАЛЬНУЮ змейку, получив максимально читаемый, масштабируемый код.

И насколько здорово эта программа отражает принципы ООП, если разрабатывать её правильно»

Куда двигаться дальше? 

— По окончании курса можно будет выбрать любое направление: изучать Java, Python, C++, C#, Ruby, Php — практически в любом языке вам придется столкнуться с ООП и использовать эти принципы при написании ЛЮБОЙ программы. Понимание базовых принципов ООП поможет вам с бОльшей легкостью освоить любой язык программирования.

Тем, кто хочет стать программистом, рекомендуем профессию «Веб-разработчик».

Источник: https://geekbrains.ru/posts/oop_cource

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

 

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

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

С объектом связывается набор действий, иначе называемых методами.

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

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

Описание множества однотипных объектов называется классом.

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

Класс – это описание множества объектов программирования (объектов) и выполняемых над ними действий.

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

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

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

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

Программирование «от класса к классу» включает в себя ряд новых понятий. Основными понятиями ООП являются

  • инкапсуляция;
  • наследование;
  • полиморфизм.

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

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

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

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

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

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

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

Читайте также:  Планирование и мотивация деятельности - студенческий портал

Полиморфная функция – это семейство функций с одним и тем же именем, но выполняющие различные действия в зависимости от условий вызова.

Например, нахождение абсолютной величины в языке Си требует трех разных функций с разными именами:

int abs(int);long int labs(long int);double fabs(double);

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

Назад: Язык C++

Источник: https://prog-cpp.ru/oop/

Ооп в php: продвинутый курс

В данном курсе вы научитесь программировать на PHP в объектно-ориентированном стиле. Данное умение просто необходимо для разработки проектов, в которых участвует более одного человека – то есть на настоящей работе.

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

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

Разумеется, что это за продвинутый курс, если в нём не будет уроков о работе с базой данных. Здесь вы узнаете, как правильно работать с MySQL, используя технологию ORM и паттерн ActiveRecord.

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

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

Все ученики имеют доступ к общему Telegram-чату, в котором можно задать вопросы и получить ответ в течение 10 минут.

Не, ну Вы видели эти цены на курсы в десятки тысяч рублей? У меня Вы пройдёте обучение по цене, сравнимой с покупкой книги.

Если Вас что-то не устроит — просто напишите мне любым удобным способом. И я верну Вам деньги в тот же день.

Объектно-ориентированное программирование - Студенческий портал

Привет! Меня зовут Артём Ивашкевич. Я работаю веб-разработчиком более двух с половиной лет. Сейчас я работаю в компании Зарплата.ру — это крупный проект, над которым трудятся более 50 разработчиков, его ежемесячная посещаемость более 4 млн человек.

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

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

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

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

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

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

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

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

Кроме того, на курсах их познакомят со свойствами, методами и константами класса.

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

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

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

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

Какие возможности получают ученики после курсов?

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

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

Также важно иметь знания проектирования пакетов и платформ.

Продвинутый курс PHP предназначен для тех, кто имеет знания основного курса и стремится к повышению своего профессионализма в разработке до уровня junior PHP developer. Кроме того, обучение позволит приобрести необходимые навыки работы в команде.

Источник: https://WebShake.ru/oop-v-php-prodvinutyj-kurs

Объектно-ориентированное программирование: на пальцах

Ста­тья не маль­чи­ка, но мужа.

Наста­ло вре­мя серьёз­ных тем: сего­дня рас­ска­жем про объектно-ориентированное про­грам­ми­ро­ва­ние, или ООП. Это тема для про­дви­ну­то­го уров­ня раз­ра­бот­ки, и мы хотим, что­бы вы его постиг­ли.

Из это­го тер­ми­на мож­но сде­лать вывод, что ООП — это такой под­ход к про­грам­ми­ро­ва­нию, где на пер­вом месте сто­ят объ­ек­ты. На самом деле там всё немно­го слож­нее, но мы до это­го ещё добе­рём­ся. Для нача­ла пого­во­рим про ООП вооб­ще и раз­бе­рём, с чего оно начи­на­ет­ся.

Обычное программирование (процедурное)

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

Напри­мер, в интернет-магазине может быть функ­ция «Про­ве­рить email». Она полу­ча­ет на вход какой-то текст, сопо­став­ля­ет со сво­и­ми пра­ви­ла­ми и выда­ёт ответ: это пра­виль­ный элек­трон­ный адрес или нет. Если пра­виль­ный, то true, если нет — то false.

Функ­ции полез­ны, когда нуж­но упа­ко­вать мно­го команд в одну.

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

Что не так с процедурным программированием

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

Напри­мер, вы пише­те функ­цию «Заре­ги­стри­ро­вать поль­зо­ва­те­ля интернет-магазина». Внут­ри неё вам нуж­но про­ве­рить его элек­трон­ный адрес.

Вы вызы­ва­е­те функ­цию «Про­ве­рить email» внут­ри функ­ции «Заре­ги­стри­ро­вать поль­зо­ва­те­ля», и в зави­си­мо­сти от отве­та функ­ции вы либо реги­стри­ру­е­те поль­зо­ва­те­ля, либо выво­ди­те ошиб­ку.

И у вас эта функ­ция встре­ча­ет­ся ещё в деся­ти местах. Функ­ции как бы пере­пле­те­ны.

Тут при­хо­дит продакт-менеджер и гово­рит: «Хочу, что­бы поль­зо­ва­тель точ­но знал, в чём ошиб­ка при вво­де элек­трон­но­го адре­са». Теперь вам нуж­но научить функ­цию выда­вать не про­сто true — false, а ещё и код ошиб­ки: напри­мер, если в адре­се опе­чат­ка, то код 01, если адрес спа­мер­ский — код 02 и так далее. Это неслож­но реа­ли­зо­вать.

Вы зале­за­е­те внутрь этой функ­ции и меня­е­те её пове­де­ние: теперь она вме­сто true — false выда­ёт код ошиб­ки, а если ошиб­ки нет — пишет «ОК».

И тут ваш код лома­ет­ся: все десять мест, кото­рые ожи­да­ли от про­ве­ряль­щи­ка true или false, теперь полу­ча­ют «ОК» и из-за это­го лома­ют­ся.

Теперь вам нуж­но:

  • либо пере­пи­сы­вать все функ­ции, что­бы научить их пони­мать новые отве­ты про­ве­ряль­щи­ка адре­сов;
  • либо пере­де­лать сам про­ве­ряль­щик адре­сов, что­бы он остал­ся сов­ме­сти­мым со ста­ры­ми места­ми, но в нуж­ном вам месте как-то ещё выда­вал коды оши­бок;
  • либо напи­сать новый про­ве­ряль­щик, кото­рый выда­ёт коды оши­бок, а в ста­рых местах исполь­зо­вать ста­рый про­ве­ряль­щик.

Зада­ча, конеч­но, реша­е­мая за час-другой.

Но теперь пред­ставь­те, что у вас этих функ­ций — сот­ни. И изме­не­ний в них нуж­но делать десят­ки в день.

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

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

Это назы­ва­ет­ся спагетти-код, и для борь­бы с ним как раз при­ду­ма­ли объектно-ориентированное про­грам­ми­ро­ва­ние.

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

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

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

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

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

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

И бла­го­да­ря сов­мест­ной рабо­те этих при­бо­ров у вас полу­ча­ет­ся ужин.

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

Инкап­су­ля­ция — объ­ект неза­ви­сим: каж­дый объ­ект устро­ен так, что нуж­ные для него дан­ные живут внут­ри это­го объ­ек­та, а не где-то сна­ру­жи в про­грам­ме.

Читайте также:  Финансовый менеджмент - студенческий портал

Напри­мер, если у меня есть объ­ект «Поль­зо­ва­тель», то у меня в нём будут все дан­ные о поль­зо­ва­те­ле: и имя, и адрес, и всё осталь­ное.

И в нём же будут мето­ды «Про­ве­рить адрес» или «Под­пи­сать на рас­сыл­ку».

Абстрак­ция — у объ­ек­та есть «интер­фейс»: у объ­ек­та есть мето­ды и свой­ства, к кото­рым мы можем обра­тить­ся извне это­го объ­ек­та. Так же, как мы можем нажать кноп­ку на блен­де­ре. У блен­де­ра есть мно­го все­го внут­ри, что застав­ля­ет его рабо­тать, но на глав­ной пане­ли есть толь­ко кноп­ка. Вот эта кноп­ка и есть абстракт­ный интер­фейс.

В про­грам­ме мы можем ска­зать: «Уда­лить поль­зо­ва­те­ля». На язы­ке ООП это будет «пользователь.удалить()» — то есть мы обра­ща­ем­ся к объ­ек­ту «поль­зо­ва­тель» и вызы­ва­ем метод «уда­лить». Кайф в том, что нам не так важ­но, как имен­но будет про­ис­хо­дить уда­ле­ние: ООП поз­во­ля­ет нам не думать об этом в момент обра­ще­ния.

Напри­мер, над мага­зи­ном рабо­та­ют два про­грам­ми­ста: один пишет модуль зака­за, а вто­рой — модуль достав­ки. У пер­во­го в объ­ек­те «заказ» есть метод «отме­нить».

И вот вто­ро­му нуж­но из-за достав­ки отме­нить заказ. И он спо­кой­но пишет: «заказ.отменить()».

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

Насле­до­ва­ние — спо­соб­ность к копи­ро­ва­нию. ООП поз­во­ля­ет созда­вать мно­го объ­ек­тов по обра­зу и подо­бию дру­го­го объ­ек­та. Это поз­во­ля­ет не копи­па­стить код по две­сти раз, а один раз нор­маль­но напи­сать и потом мно­го раз исполь­зо­вать.

Напри­мер, у вас может быть некий иде­аль­ный объ­ект «Поль­зо­ва­тель»: в нём вы про­пи­сы­ва­е­те всё, что может про­ис­хо­дить с поль­зо­ва­те­лем. У вас могут быть свой­ства: имя, воз­раст, адрес, номер кар­ты. И могут быть мето­ды «Дать скид­ку», «Про­ве­рить заказ», «Най­ти зака­зы», «Позво­нить».

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

Иде­аль­ные объ­ек­ты про­грам­ми­сты назы­ва­ют клас­са­ми.

Поли­мор­физм — еди­ный язык обще­ния. В ООП важ­но, что­бы все объ­ек­ты обща­лись друг с дру­гом на понят­ном им язы­ке. И если у раз­ных объ­ек­тов есть метод «Уда­лить», то он дол­жен делать имен­но это и писать­ся вез­де оди­на­ко­во. Нель­зя, что­бы у одно­го объ­ек­та это было «Уда­лить», а у дру­го­го «Сте­реть».

При этом внут­ри объ­ек­та мето­ды могут быть реа­ли­зо­ва­ны по-разному. Напри­мер, уда­лить товар — это выдать пре­ду­пре­жде­ние, а потом поме­тить товар в базе дан­ных как уда­лён­ный.

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

У него про­сто есть метод «Уда­лить()», и он ему дове­ря­ет.

Создать карусель Добавьте описание

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

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

Плюсы и минусы ООП

У объектно-ориентированного про­грам­ми­ро­ва­ния мно­го плю­сов, и имен­но поэто­му этот под­ход исполь­зу­ет боль­шин­ство совре­мен­ных про­грам­ми­стов.

  • Визу­аль­но код ста­но­вит­ся про­ще, и его лег­че читать. Когда всё раз­би­то на объ­ек­ты и у них есть понят­ный набор пра­вил, мож­но сра­зу понять, за что отве­ча­ет каж­дый объ­ект и из чего он состо­ит.
  • Мень­ше оди­на­ко­во­го кода. Если в обыч­ном про­грам­ми­ро­ва­нии одна функ­ция счи­та­ет повто­ря­ю­щи­е­ся сим­во­лы в одно­мер­ном мас­си­ве, а дру­гая — в дву­мер­ном, то у них боль­шая часть кода будет оди­на­ко­вой. В ООП это реша­ет­ся насле­до­ва­ни­ем.
  • Слож­ные про­грам­мы пишут­ся про­ще. Каж­дую боль­шую про­грам­му мож­но раз­ло­жить на несколь­ко бло­ков, сде­лать им мини­маль­ное напол­не­ние, а потом раз за разом подроб­но напол­нить каж­дый блок.
  • Уве­ли­чи­ва­ет­ся ско­рость напи­са­ния. На стар­те мож­но быст­ро создать нуж­ные ком­по­нен­ты внут­ри про­грам­мы, что­бы полу­чить мини­маль­но рабо­та­ю­щий про­то­тип.

А теперь про мину­сы:

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

Что дальше

Впе­ре­ди нас ждёт раз­го­вор о клас­сах, объ­ек­тах и всём осталь­ном важ­ном в ООП. Кре­пи­тесь, будет инте­рес­но!

Подписывайтесь на наш канал, чтобы стать настоящим профи!

Источник: https://zen.yandex.ru/media/id/5c7ce8b92248a400aff22085/5d931239c31e4900b16af5c0

Видеокурс: основы объектно-ориентированного программирования

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

1. Введение в обучающий видеокурс по основам объектно-ориентированного программирования (ООП)

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

2. Основные принципы объектно-ориентированного программирования. Что такое ООП и зачем оно нужно?

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

3. Понятие класса и объекта в ООП

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

4. Полезные советы при создании класса в ООП

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

5. Методы и данные в ООП

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

6. Методы в ООП. Типы методов

Продолжаем изучать тему методов в объектно-ориентированном программировании. Какие виды методов существует и зачем они нужны? Чем методы экземпляров отличаются от методов класса? Конструктор, деструктор, getter, setter – что это такое и зачем эти методы нужны?

7. Каким должен быть хороший метод в ООП

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

8. Наследование в ООП

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

9. Инкапсуляция данных в ООП

Что означает слово «инкапсулирование», и как это относится к методам класса? Как защитить методы от внешнего воздействия, когда и зачем это может понадобиться? На примере рассмотрим методы, которые стоит инкапсулировать.

10. Абстракция в ООП

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

11. Полиморфизм в ООП

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

Источник: https://proglib.io/p/oop-videocourse/

Объектно-ориентированное программирование. Прикладное программирование на языке С++ в среде OS Windows

АННОТАЦИЯ

к программе повышения квалификации

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

У слушателей курса формируются:

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

Основное внимание уделяется изучению принципов объектно-ориентированного подхода при декомпозиции поставленной задачи и способов повышения эффективности разрабатываемых программ с учетом применения библиотеки MFC.

Результатом обучения является приобретение знаний и умений по:

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

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

Объем программы: 40 часов.

Форма обучения: очно-заочная.

ПОСМОТРЕТЬ УЧЕБНЫЙ ПЛАН ПРОГРАММЫ ПОВЫШЕНИЯ КВАЛИФИКАЦИИ

Источник: https://mai.ru/education/fpk/oop_windows/

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

Мунаев С. С. Обучение студентов основам объектно-ориентированного программирования // Молодой ученый. — 2016. — №7. — С. 674-674. — URL https://moluch.ru/archive/111/27691/ (дата обращения: 20.03.2020).

Читайте также:  Значение паукообразных в природе и в жизни человека: для чего пауки были созданы?



The article is describes the basics of learning objectively oriented to program. Considered the basic concepts objectively oriented to program: abstraction, encapsulation, modularity, hierarchy. The analysis of structural and objectively oriented differences in the method programming.

Keyword: objectively oriented to program, abstraction, encapsulation, modularity, hierarchy.

Усложнение и увеличение программного обеспечения используемого в системе образования, всеобщее внедрение в школы систем дистанционных технологий и электронного обучения требуют изменения и развития системы подготовки будущего учителя информатики. Система подготовки будущего учителя информатики в современных условиях должна быть реализована с учетом постоянного развития аппаратного и программного обеспечения компьютера, а также средств связи [2, 5].

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

Так, соответствии со спецификацией единого государственного экзамена по информатике 2016 года три раздела — «Логика и алгоритмы», «Элементы теории алгоритмов» и «Программирование» занимают по объему 65 % от общего количества заданий.

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

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

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

Программирование как теоретическая и научная отрасль деятельности человека стала развиваться начиная с 60-х годов 20 столетия.

Теоретические и научные исследования затронули как алгоритмы и алгоритмические структуры, методы оптимизации алгоритмов и ресурсов компьютера, так и языки программирования.

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

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

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

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

В последние годы наиболее бурное развитие проживают объектно-ориентированные языки программирования.

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

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

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

Инкапсуляция — это процесс отделения друг от друга элементов объекта, определяющих его устройство и поведение. Абстракция и инкапсуляция взаимно дополняют друг друга: абстрагирование отвечает за внешнюю составляющую объекта, а инкапсуляция за внутреннюю.

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

Иерархия — это упорядочение абстракций, расположение их по уровням.

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

Между объектами устанавливается связи [3].

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Литература:

  1. Буч Г. Объектно-ориентированный анализ и проектирование с примерами приложений на C++. — М.: Бином, 1999.
  2. Кузнецов А. А., Сурхаев М. А. Совершенствование методической системы подготовки учителя информатики в условиях формирования новой образовательной среды. Учебное пособие. –М., 2012.
  3. Магомедов Р. М. Формирование системно-логического мышления будущего учителя информатики при изучении объектно-ориентированного программирования. Дисс…к.п.н. –М., 2002 г.
  4. Пантелеймонов А. Программируем для Widows. // Мир ПК. — 1995. — № 6. — С. 9.
  5. Сурхаев М. А. Подготовка будущих учителей информатики для работы в условиях информационно-коммуникационной образовательной среды. –М., 2009.
  6. Телло Э. Р. Объектно-ориентированное программирование в среде Windows: Пер. с англ.  М.: Наука-Уайли, 1993.

Основные термины (генерируются автоматически): будущего учителя информатики, подготовки будущего учителя, языки программирования, парадигма программирования, objectively oriented, будущих учителей информатики, линий изучения информатики, структурного программирования, системе подготовки будущего, подготовки учителя информатики, языки программирования высокого, отрасль деятельности человека, объектный подход, методами структурного программирования, философия структурного программирования, современные языки программирования, языков программирования, новой философией программирования, язык программирования, класса объектов.

Источник: https://moluch.ru/archive/111/27691/

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

Последнее обновление: 08.10.2019

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

Вначале создадим новый проект консольного приложения .NET Core, который назовем BankApplication:

И после этого создается стандартный пустой проект с классом Program и методом Main. Это будет главный проект приложения.

Но для хранения классов и интерфейсов нередко создаются отдельные проекты, в рамках которых все классы компилируются в файл библиотеки dll, которая затем подключается к главному проекту. Поэтому добавим в решение новый проект. Для этого нажмем правой кнопкой мыши на решение и выберем в контекстном меню Add -> New Project…:

В качестве типа нового проекта выберем шаблон Class Library (.NET Core) и назовем новый проект BankLibrary:

После этого в решение добавляется новый проект, который по умолчанию имеет один файл Class1.cs. Он нам не нужен, поэтому удалим этот файл.

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

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

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

Итак, добавим в проект BankLibrary интерфейс IAccount, который будет иметь следующее содержание:

public interface IAccount
{
// Положить деньги на счет
void Put(decimal sum);
// Взять со счета
decimal Withdraw(decimal sum);
}

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

Для реакции на изменения состояния счеты мы будем использовать событийную модель, то есть обрабатываться различные изменения счета через события. Для этого добавим в проект BankLibrary новый файл AccountStateHandler.cs, в котором определим делегат и вспомогательный класс:

namespace BankLibrary
{
public delegate void AccountStateHandler(object sender, AccountEventArgs e);

public class AccountEventArgs
{
// Сообщение
public string Message { get; private set;}
// Сумма, на которую изменился счет
public decimal Sum { get; private set;}

public AccountEventArgs(string _mes, decimal _sum)
{
Message = _mes;
Sum = _sum;
}
}
}

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

Теперь определим основной класс приложения Account.

Источник: https://metanit.com/sharp/tutorial/3.29.php

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