шпоры5 (1079657)
Текст из файла
18.Принципы объектно-ориентированного программирования.
Инкапсуляция- способ объединения данных и функций(методов) для их обработки.
Наследование-создание более больших классов из простых с добавлением параметров и определением новых свойств. Причем новые свойства наследуются производными классами от базовых. Также можно трактовать наследование, как определение объекта и его дальнейшее использование для построения иерархии производных объектов с возможностью для каждого производного объекта, относящегося к иерархии, доступа к коду и данным всех производных объектов.
На этих трех параметрах базируется объектно-ориентированное программирование.
Принцип наследования - один из трёх основных принципов объектно-ориентированного программирования. Он реализуется через механизмы наследования и виртуальных классов, которые позволяют строить новые производные классы на основе ранее объявленных базовых классов. Принцип наследования уподобил процесс программирования процессу сборки сложных устройств и механизмов из наборов стандартных узлов и деталей.
Принцип инкапсуляции - второй принцип объектно-ориентированного программирования, делает процесс программирования ещё более похожим на работу в сборочном цехе. Хорошо спроектированный класс имеет открытый интерфейс для взаимодействия с "внешним миром" и защищённую от случайного воздействия "внутреннюю" часть. Такой класс подобен автомобильному двигателю. В момент его установки в кузове или на раме при сборке автомобиля, он уже полностью собран. И не нужно сверлить в корпусе двигателя дополнительные отверстия для подсоединения трубопроводов системы охлаждения, подачи топлива и машинного масла. Разделение класса на скрытую внутреннюю часть и открытый интерфейс обеспечивается системой управления доступом к компонентам класса и дружественными функциями.
Принцип полиморфизма (полиморфизм означает буквально многообразие форм) - ещё один принцип объектно-ориентированного программирования. Он заключается в способности объекта во время выполнения программы динамически изменять свои свойства. Возможность настройки указателя на объект базового класса на объекты производных классов и механизм виртуальных функций лежат в основе этого принципа объектно-ориентированного программирования.
Инкапсуляция
Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейсную часть класса (т. е. список декларируемых свойств и методов класса) и не вникать в его внутреннюю реализацию. Поэтому данные принято инкапсулировать в классе таким образом, чтобы доступ к ним по чтению или записи осуществлялся не напрямую, а с помощью методов. Принцип инкапсуляции (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов.
Наследование
Наследованием называется возможность порождать один класс от другого с сохранением всех свойств и методов класса-предка (прародителя, иногда его называют суперклассом) и добавляя, при необходимости, новые свойства и методы. Набор классов, связанных отношением наследования, называют иерархией. Наследование призвано отобразить такое свойство реального мира, как иерархичность.
Полиморфизм
Полиморфизмом называют явление, при котором один и тот же программный код (полиморфный код) выполняется по-разному в зависимости от того, объект какого класса используется при вызове данного кода. Полиморфизм обеспечивается тем, что в классе-потомке изменяют реализацию метода класса-предка с обязательным сохранением сигнатуры метода. Это обеспечивает сохранение неизменным интерфейса класса-предка и позволяет осуществить связывание имени метода в коде с разными классами — из объекта какого класса осуществляется вызов, из того класса и берётся метод с данным именем. Такой механизм называется динамическим (или поздним) связыванием — в отличие от статического (раннего) связывания, осуществляемого на этапе компиляции программы.
44. Списковые структуры и операции с ними
Связный список - базовая структура данных, в которой каждый элемент содержит информацию, необходимую для получения следующего элемента. Основное преимущество связного списка перед массивами заключается в возможности эффективного изменения расположения элементов.
Связный список-набор элементов, причем каждый из них является частью узла, который также содержит ссылку на узел.
Связные списки могут иметь одиночные или двойные связи. В списке с одиночными связями каждый элемент содержит ссылку на следующий элемент данных. В списке с двойными связями каждый элемент содержит ссылки на предыдущий и последующий элементы. Наиболее распространены списки с двойными связями, так как их можно читать в двух направлениях, поврежденный список с двойными связями легче перестраивать, так как с каждым членом списка ассоциированы две ссылки, некоторые типы операций над списками(например удаление) проще выполняются над списками с двойными связями.
В то же время списки с двойными ссылками представляют собой динамические структуры данных, которые могут растягиваться или сжиматься в процессе выполнения программы. При добавлении или удалении элементов ссылки в списке соответствующим образом перестраиваются.
Наиболее ярко особенности списка можно рассмотреть на примере операций добавления и удаления элементов списка.
Наиболее простой динамической структурой является однонаправленный список (рисунок 1). Для создания списка определяется структурный тип T, у которого имеется одно поле next, объявленное как указатель на T. Другие поля структуры содержат информацию, характеризующую элемент списка. При образовании первого элемента ("корня") списка в поле next заносится пустой указатель (nil или NULL). При дальнейшем построении списка это значение будет присутствовать в последнем элементе списка
Над списком, построенном в такой манере, можно выполнять операции поиска элемента, удаления элемента и занесение нового элемента в начало, конец или середину списка. Понятно, что все эти операции будут выполняться путем манипуляций над содержимым поля next существующих элементов списка. Для оптимизации операций над списком иногда создают вспомогательную переменную-структуру (заголовок списка), состоящую из двух полей - указателей на первый и последний элементы списка (рисунок 2). Для этих же целей создают двунаправленные списки, элементы которых, помимо поля next, включают поле previous, содержащее указатель на предыдущий элемент списка (рисунок 3) и, возможно, ссылки на заголовок списка (рисунок 4).
20. см в 19
46. Построение списков при помощи указателей.
Рассмотрим построение односвязного списка. При этом будем использовать простую иерархию классов. Один из классов, назовем его listob, определяет природу объектов, которые будут храниться в списке. Этот класс затем наследуется другим классом, назовем его dllist, который фактически и реализует механизм односвязного списка.
Приведем примерное описание данных классов с указанием основных полей данных, обеспечивающих работу списка.
class listob
{public:
int info;
int *next; //указатель на следующий объект };
Член info содержит информацию, хранящуюся в списке, определяемую родовым типом. Кроме того, вместе с классом listob определен ряд операций, которые могут выполняться над объектами класса listob. В частности можно извлечь и модифицировать информацию, ассоциируемую с объектом, а также получить указатель на последующий элемент. Указатель next хранит значение NULL, пока в список не будет введен первый элемент.
Хотя класс listob имеет природу односвязного списка, он сам не создает этого списка. Механизм построения связного списка реализуется классом dllist, он наследует listob.
class dllist
{listob *start;
void remove(); удаление элемента
void frwdlist(); отображение списка с начала};
Класс dllist поддерживает один указатель на начало списка. Класс должен поддерживать целый ряд операций над односвязным списком:
-ввод нового элемента в список
-удаление элемента из списка
-просмотр списка сначала
-поиск в списке конкретного элемента
-получение указателей на начало списка.
Достоинства
---лёгкость добавления и удаления элементов
---размер ограничен только объёмом памяти компьютера и разрядностью указателей
Недостатки
---сложность определения адреса элемента по его индексу (номеру) в списке
---на поле указателей расходуется дополнительная память (в массивах), например, указатели не нужны)
---работа со списком медленнее, чем с массивами, так как к любому элементу списка можно обратится, только пройдя все предшествующие ему элементы
-
Отношения классов.
Отношения между классами
-----Наследование (Генерализация) — объекты дочернего класса наследуют все свойства родительского класса.
-----Ассоциация — объекты классов вступают во взаимодействие между собой.
-----Агрегация — объекты одного класса, входят в объекты другого.
-----Композиция — объекты одного класса, входят в объекты другого и зависят друг от друга по времени жизни.
-----Класс-Метакласс — отношение, при котором экземплярами одного класса являются другие классы.
(для 20-го,21-го)Рассмотрим отношения классов на примере наследования. Наследование–один из трех фундаментальных принципов объектно-ориентированного программирования , поскольку именно благодаря ему возможно создание иерархических классификаций.
В стандартной терминологии языка C++ класс, который наследуется, называется базовым, а который наследует базовый класс называется производным. Производный класс можно использовать в качестве базового для другого производного класса. Таким путем и строится многоуровневая иерархия классов.
Общий формат для обеспечения наследования имеет следующий вид.
class имя_производного_класса:доступ имя_базового_класса
{тело_нового_класса}
Элемент доступ может быть выражен одним из спецификаторов доступа: public, private, protected.
Рассмотрим три случая.
Public
Означает, что все public члены базового класса также будут public членами производного класса. А все private базового класса не доступны для членов производного.
Private
Означает, что все public члены базового класса становятся private членами производного класса.
Protected
Если базовый класс наследуется производным как защищенный, все его открытые и закрытые члены становятся защищенными членами производного класса.
Рассмотрим отдельно особенности защищенных членов при наследовании классов.
Если базовый класс наследуется как public класс, защищенные члены базового класса становятся защищенными членами производного класса, то есть доступными для производного класса. Следовательно, используя спецификатор protected, можно создать члены класса, которые закрыты в рамках своего класса, но которые может унаследовать производный класс, причем с получением доступа к ним.
class inf
{int a;
double b;
public:
void num();
int sum();
protected:
int asdf;};
class qwer : public inf
{int p;
public:
void func();};
Если некоторый производный класс используется в качестве базового для другого производного класса, то любой защищенный член исходного базового класса, который наследуется открытым способом первым производным классом, может быть унаследован еще раз в качестве защищенного члена вторым производным классом.
class inf
{int a;
double b;
public:
void num();
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.















