Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КР1 / Контрольная работа 1.docx
Скачиваний:
1
Добавлен:
30.08.2024
Размер:
87 Кб
Скачать
☆

Комментарии:

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. Создание экземпляров класса, т.е. объявление и резервирование памяти под сущности класса с инициализацией данных внутри них;

  3. Использование экземпляров класса, т.е. получение и изменение значений свойств, и вызов методов.

Шаблон класса объявляется ключевым словом «class», за которым следует имя класса, после которого в фигурных скобках следует список образующих его элементов, разделенных точкой с запятой. В качестве элемента может быть либо свойство, либо метод, либо реакция на событие. Перед элементами могут указываться спецификаторы доступа, которые определяют видимость и доступность элементов класса для других программных объектов. Спецификатор доступа действует от места объявления до следующего спецификатора доступа или до конца шаблона класса. Поэтому элементы с одинаковым доступом могут объединяться в группы, и спецификатор ставится перед группой. В качестве спецификаторов доступа используются ключевые слова «private», «protected», «public», после которых ставится двоеточие.

Концепция ООП использует три базовых уровня доступа:

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

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

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

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

Соседние файлы в папке КР1