Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ооп экзамент.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
235.52 Кб
Скачать

Общие понятия ООП.

  1. Понятие ооп. Причины появления ооп.

Объектно-ориентированное программирование (ООП) – основная парадигма программирования, которая, по всей видимости, сохранится и в течение текущего десятилетия (Парадигмы в программировании определяют как проводить вычисления, как работа, выполняемая компьютером должна быть структурирована и организована). Она является результатом тридцатилетнего опыта и практики, которые берут начало в языке Simula 67 и продолжаются в языках SmallTalk, С++, Object Pascal, Java, C# и др. ООП – это стиль, который фиксирует поведение реального мира так, что детали его составных частей скрыты, и тот, кто решает задачу, мыслит в терминах, присущих самой задаче, а не языку программирования. Рассмотрим основные этапы развития программирования, которые помогают лучше понять взаимосвязь структурного подхода, модульного программирования и ООП.

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

  1. Концепции ооп. Инкапсуляция

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

Инкапсуляция свойств объекта. Инкапсуляция (дословно «заключение в оболочку») представляет собой локализацию в рамках объекта всех данных об объекте, которые характеризуют его внутреннюю структуру и поведение с запрещением непосредственного доступа к тем данным, которые нецелесообразно (или даже опасно) предоставлять в распоряжение пользователя. Так, например, объект класса счетчик может содержать атрибут целого типа текущее значение, и, по всей видимости, было бы опасно дать пользователю возможность менять это значение произвольным образом, добавляя к нему любое целое значение или вычитая его. Отношения частей к целому и к другим частям более ясны, когда все связано вместе, в одной оболочке. Это качество называется инкапсуляцией. Связывая код и описания данных вместе, объект помогает упорядочить их. Если требуется получение значения одного из атрибутов объекта, то вызывается метод, принадлежащий этому объекту, который возвращает значение нужного атрибута. Разумеется, это возможно только тогда, когда такой метод представлен в описании объектного типа. Аналогично, чтобы задать значение атрибута, вызывается метод, который присваивает этому атрибуту новое значение. В С++ атрибуты объекта называются элементами данных, или полями, а операции – компонентными функциями, или методами. В Java и C# они соответственно называются полями и методами. Кроме того, понятие «атрибут» в C# имеет другой смысл. Поэтому в дальнейшем мы будем считать синонимами понятия элемент данных и поле, с одной стороны, и операция, компонентная функция и метод – с другой стороны. Компонентная функция, не вырабатывающая другого результата, кроме изменения состояния объекта, иногда называется процедурой. Разные объектно-ориентированные языки программирования решают проблему инкапсуляции по-разному. Так, например, в SmallTalk все поля объекта (внутренние переменные) скрыты от пользователя и доступны только в телах методов данного класса, в то же время все методы объекта открыты пользователю. Более гибкая схема реализована в С++, Java и C#. В этих языках каждый компонент объекта (поле или метод) может помечаться одним из спецификаторов доступа private, protected или public. Компонент, помеченный как private (скрытый), может использоваться только в телах методов данного класса, компонент, помеченный как protected (защищенный), может дополнительно использоваться в наследниках данного класса (т.е. в телах их методов), а компонент, помеченный как public (открытый), может использоваться в любом месте программы. Такое гибкое разграничение доступа к компонентам объекта позволяет избежать нежелательных искажений свойств объекта и допустить эффективный доступ к ним, когда это необходимо (прямой доступ к элементу данных объекта обычно более эффективен, чем доступ к нему посредством метода). Доступ к открытым компонентам объекта осуществляется посредством одной или нескольких операций выбора компонента. Например, в С++ есть операции выбора «.» и «->». Левым аргументом первой операции является имя объекта, а второй – указатель на объект. В Java и C# нет различия между этими понятиями, поэтому там есть только одна операция «.». Правый аргумент операции – это всегда имя компонента с возможными аргументами, если этот компонент – функция.