Vvmebel.com

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

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

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

ПРОГРАММИРОВАНИЕ.

Программное обеспечение. Основные этапы решения задач на ЭВМ. Жизненный цикл программного средства

Программа — упорядоченная последовательность ко­манд компьютера для решения задачи. Программное обеспечение (sowtware) – совокупность программ обработ­ки информации и документов, необходимых для их эксплуатации.

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

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

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

2) Системное ПО – переходный. Программы обеспечивают взаимодействие прочих программ компьютерной системы с программами базового уровня и непосредственно с аппаратным обеспечением (драйверы). Совокупность программного обеспечения системного уровня образует ядро операционной системы компьютера.

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

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

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

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

1) Постановка задачи:

§ сбор информации о задаче;

§ формулировка условия задачи;

§ определение конечных целей решения задачи;

§ определение формы выдачи результатов;

§ описание данных (их типов, диапазонов величин, структуры и т. п.).

2) Анализ и исследование задачи, модели:

§ анализ существующих аналогов;

§ анализ технических и программных средств;

§ разработка математической модели;

§ разработка структур данных.

3) Разработка алгоритма:

§ выбор метода проектирования алгоритма;

§ выбор формы записи алгоритма (блок-схемы, псевдокод и др.);

§ выбор тестов и метода тестирования;

§ выбор языка программирования;

§ уточнение способов организации данных;

§ запись алгоритма на выбранном языке

5) Тестирование и отладка:

§ отладка семантики и логической структуры;

§ тестовые расчеты и анализ результатов тестирования;

6) Анализ результатов решения задачи и уточнение в случае необходимости математической модели с повторным выполнением этапов 2-5.

7) Сопровождение программы:

§ доработка программы для решения конкретных задач;

§ составление документации к решенной задаче, к математической модели, к алгоритму, к программе, к набору тестов, к использованию.

ЖЦ ПО – период времени, который начинается с момента принятия решения о необходимости создания ПО и заканчивается в момент его полного изъятия из эксплуатации. Этот цикл — процесс построения и развития ПО

1) каскадная модель (70-85 г.г.);

2) спиральная модель (86-90 г.г.).

Каскадная модель.

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

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

§ Полная и согласованная документация на каждом этапе;

§ Легко определить сроки и затраты на проект.

Недостатки:

§ Увеличение объема работ, связанных с возвратом на предыдущие этапы;

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

Спиральная модель.

Цель – быстрее показать пользователю работоспособный продукт.

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

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

На каждой итерации оцениваются:

§ риск превышения сроков и стоимости проекта;

§ необходимость выполнения ещё одной итерации;

§ степень полноты и точности понимания требований к системе;

§ целесообразность прекращения проекта.

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

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

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

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

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

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

Четыре кита ООП.

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

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

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

4. Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

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

Понятие класса

Введение

Лекция 1. Объектно-ориентированное программирование. Введение

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

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

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

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

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

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

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

Читать еще:  Как отключить политику безопасности

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лекция 2. Общие сведения о классах

Основные понятия в объектно-ориентированном программировании ИЛИ
моя шпаргалка по ООП

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

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

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

ШПАРГАЛКА ПО ООП

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

Основные принципы ООП

  • абстрагирование
  • инкапсуляция
  • модульность
  • иерархия

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

Объекты и классы — основные абстракции предметной области.

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

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

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

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

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

Тип — точная характеристика некоторой совокупности однородных объектов, включающая структуру и поведение.

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

Параллелизм — это свойство, отличающее активные объекты от пассивных.

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

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

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

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

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

Объект — осязаемая сущность (tangible entity) — предмет или явление (процесс), имеющие четко выраженные границы, индивидуальность и поведение.

Читать еще:  Массивы в программировании для чайников

Любой объект обладает состоянием, поведением и индивидуальностью.

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

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

Индивидуальность это свойства объекта, отличающие его от всех других объектов.

Структура и поведение схожих объектов определяют общий для них класс.

Объект в JavaScript создаётся с помощью функции Object.create. Эта функция из родителя и опционального набора свойств создаёт новую сущность. Пока что мы не будем беспокоиться о параметрах.

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

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

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

Конструктор класса — специальный блок инструкций, вызываемый при создании объекта.

var s = new String();

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

Атрибут — поименованное свойство класса, определяющее диапазон допустимых значений, которые могут принимать экземпляры данного свойства. Атрибуты могут быть скрыты от других классов, это определяет видимость атрибута: рublic (общий, открытый); private (закрытый, секретный); protected (защищенный).

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

Дескриптор — это атрибут объекта со связанным поведением (англ. binding behavior), т.е. такой, чьё поведение при доступе переопределяется методами протокола дескриптора.

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

Метод — это функция или процедура, принадлежащая какому-то классу или объекту.

Различают простые методы и статические методы (методы класса):

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

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

В зависимости от того, какой уровень доступа предоставляет тот или иной метод, выделяют:

  • открытый (public) интерфейс — общий интерфейс для всех пользователей данного класса;
  • защищённый (protected) интерфейс — внутренний интерфейс для всех наследников данного класса;
  • закрытый (private) интерфейс — интерфейс, доступный только изнутри данного класса.

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

Полиморфизм — способность скрывать множество различных реализаций под единственным общим именем или интерфейсом.

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

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

Компонент — это относительно независимая и замещаемая часть системы, выполняющая четко определенную функцию в контексте заданной архитектуры.

Компонент представляет собой физическую реализацию проектной абстракции и может быть: компонентом исходного кода (cpp-шник); компонентом времени выполнения (dll, ActiveX и т. п.); исполняемый компонентом (exe-шник). Компонент обеспечивает физическую реализацию набора интерфейсов. Компонентная разработка (component-based development) представляет собой создание программных систем, состоящих из компонентов (не путать с объектно-ориентированным программированием (ООП).

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

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

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

-единицей управления конфигурацией.

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

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

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

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

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

Положения ООП (Алан Кей).

— Все является объектом.

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

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

— Каждый объект является представителем класса, который выражает общие свойства объектов.

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

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

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

Тема 3. 3. Основы объектно-ориентированного программирования на С++

Основные свойства ООП

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

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

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

Элементы касса (компоненты класса member) делятся на поля (данные-члены, элементы данных), которые представляют собой данные и методы (компонентные функции, функции-члены), которые представляют собой функций для работы с данными.

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

В классе можно использовать одни из спецификаторов, управляющих видимостью элементов класса.

private – видимы только внутри класса

public – видимы вне класса.

protected (только для построения иерархии классов).

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

Если тело метода определяется внутри класса, то он называется встроенными (inline). Обычно встроенными делают только короткие методы. Если тело метода описывается вне класса, то используется операция изменения видимости.

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

имя_класса имя_объекта [(список параметров)];

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

Читать еще:  Разделы политики безопасности

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

Для доступа к элементам класса осуществляется обычно с помощью операции уточненного имени

имя объекта. имя элемента

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

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

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

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

— при перезагрузке операций сохраняется количество аргументов, приоритеты операций и правила ассоциации;

— для стандартных типов данных переопределять операции нельзя;

— функции операции наследуются (кроме =), не могут иметь аргументы по умолчанию, не могут определяться как static;

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

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

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

Чтобы дать адекватный ответ на данный вопрос, придется ознакомиться не только с основными свойствами ООП, но и разобраться с некоторыми понятиями — к примеру, полиморфизм, а также, инкапсуляция и наследование. Из интерактивных курсов по разработке и программированию веб-сайтов в модуле PHP/MySQL вы можете познакомиться с теоретической базой ООП, а применить знания на практике в модуле CodeIgniter MVC — весь модуль.

Введение в ООП

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

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

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

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

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

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

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

Что из себя представляет КЛАСС

Здесь все достаточно просто — это методы, а также, поля программы. В качестве примера можно рассмотреть Human:

Здесь все достаточно просто, Human является именем класса, $words представляет собой переменную (поле), ну а setWords, getWords(), sayIt(), являются методами.

Несколько базовых принципов ООП

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

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

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

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

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

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

Приведем в качестве примера инкапсуляции следующее:

Здесь показан Human, в данном классе мы добавили “sex” (пол), которое сделали приватным — это не позволит внешним пользователям получить к нему доступ.

Вот как будет выглядеть попытка получения доступа к данному поля вне самого класса:

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

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

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

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

Каждый человек обладает определенным набором функций при рождении, это так называемый базовый набор — дыхание, переваривание пищи, крик.

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

Как это работает? Существуют родительские классы с базовым функционалом — при создании нового класса, не потребуется создание новых базовых навыков, он изначально унаследует «базу» родительского класса. Это существенно упрощает работу программистам. Есть слово «extends», которое обозначает наследование, сейчас покажем вам определенный пример:

Что же мы увидим в результате:

Если рассматривать созданные классы — они оба обладают базовым набором навыков, но есть свои отличия — «Мужчина» отращивает бороду, «Женщина» рожает ребенка.

Полиморфизм

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

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

Ну как? Теперь проще понять разное поведение одного метода в ООП?

Пример полиморфизма:

Результат:

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

Обратите внимание на разную реализацию метода say() в классах Man, а также, Women — Это называется полиморфизм.

Особенности Интерфейса

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

Рассмотрим прошлый пример:

Данный интерфейс необходимо имплементировать в абстрактный класс Human. Сделать это достаточно просто — находим название класса, и сразу же после него добавляем «implements».

Абстрактный класс

Абстрактный класс в ООП — это класс шаблонный класс, от которого нельзя создать экземпляр класса.

Пример того, чего мы не сможем сделать:

В любом случае будем получать ошибку.

Есть возможность наследования Абстрактного класса. Еще один пример Абстрактного класса:

Выводы

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

В большом курсе Профессия веб-программист в модулях PHP/MySQL вы познакомитесь с теоретической базой ООП, а практическая реализация — в модуле CodeIgniter.

Мы привели достаточно простые примеры — это отличная возможность для любого новичка в сегменте программирования! Надеемся, что помогли вам понять особенности ООП, изучить наиболее важные принципы, чтобы в дальнейшем совершенствовать свои умения. Несколько будущих статей будут направлены на то, чтобы разобраться с важными ключевыми словами public, private, protected, static. Увидеть все особенности на весьма простых примерах.

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