Язык программирования Си++ (1119468)
Текст из файла
Технологии построенияпрограмм• Процессно-ориентированный подход: программа – это записьряда последовательно выполняемых операций• Алгоритм (процесс выполнения) воздействует на данные• Объектно-ориентированный подход: программа состоит изобъектов – элементов данных и фрагментов алгоритмов,обрабатывающих данные и взаимодействующих друг с другомчерез интерфейсы• Данные управляют доступом к связанным с ними алгоритмам• Статическая структура системы описывается в терминахобъектов и связей между ними, а динамическое поведениесистемы описывается в терминах обмена сообщениями междуобъектами1Основные принципы ООП• Объект – программная сущность, обладающаясостоянием (связанные с объектоминформационные свойства) и поведением (наборопераций, присущих объекту)• Объектно-ориентированное программирование– методология программирования, основанная напредставлении программы в виде совокупностиобъектов, каждый из которых являетсяэкземпляром определённого класса, а классыобразуют иерархию наследования2• Центральное звено ООП – абстракцияБлагодаря абстракции сущности произвольнойсложности можно рассматривать как единое целое, невдаваясь в детали их внутреннего построения ифункционирования• Основные механизмы (постулаты) ООП:• Инкапсуляция• Наследование• ПолиморфизмКаждый из этих механизмов в отдельности и все онивместе взятые – это средства борьбы сосложностью программ3Основные механизмы ООПИнкапсуляция• Обеспечивает сокрытие состояния объекта отостальных программных единиц• Защищает данные от несанкционированного доступасо стороны алгоритмов, внешних по отношению крассматриваемым• С помощью интерфейса (формального описанияспособов доступа к алгоритмам и данным) жёсткоконтролирует доступ к алгоритмам и данным,связанным между собой4Основные механизмы ООПНаследование• Наследование – процесс, с помощью которого объектпрограммы приобретает свойства другого объекта• Наследование поддерживает концепциюиерархической классификации, то есть иерархическогоотношения типов объектов• Наследование позволяет производному объектунаследовать от базового объекта общие атрибуты(состояние и поведение), а для себя определять толькохарактеристики, делающие его уникальным в классе5Основные механизмы ООППолиморфизм• Полиморфизм – свойство, позволяющееиспользовать одинаковый интерфейс для целойсовокупности действий (“один интерфейс –много методов”)• Различают• статический полиморфизм• динамический полиморфизм• параметрический (ти́ повый) полиморфизмЯзык программирования Си++.Приёмы декомпозиции• Декомпозиция проектируемой системы естьпоследовательное выполнение следующих шагов:• Исследование статической структуры системы• Выделение используемых объектов• Фиксация связей между объектами• Исследование динамической структуры системы• Фиксация методов обмена сообщениями междуобъектами• Состояние объекта характеризуется перечнем (обычностатическим, неизменным) всех свойств данного объекта итекущими (обычно динамическими) значениями каждого изэтих свойств7Язык программирования Си++.Приёмы декомпозиции• Операцией называется воздействие одного объекта надругой с целью вызвать соответствующую реакцию• Поведение объекта – это его наблюдаемая ипроверяемая извне деятельность, это то, как объектдействует и реагирует, поведение выражается втерминах состояния объекта и передачи сообщений• Состояние объекта представляет суммарныйрезультат его поведения• Класс – это множество объектов, имеющих общуюструктуру и общее поведение8Словарь ключевых терминовобъектно-ориентированногопрограммирования• Объект– компонент системы, представленныйсобственной памятью и набором операций• Метод– описание того, как выполнять одну изопераций объекта• Сообщение – запрос объекту на выполнение одной изего операций (“обращение к методу”)• Класс– описание группы подобных объектов• Экземпляр – один из объектов, описываемых классом9Язык программирования Си++.Виды операций над объектами• Модификатор – операция, изменяющая состояниеобъекта• Селектор– операция, считывающая состояниеобъекта, но не меняющая состояния• Итератор– операция, позволяющаяорганизовать доступ ко всем частям объекта в строгоопределённой последовательности• Конструктор – операция создания объекта и(возможно) его инициализации• Деструктор – операция, освобождающая10состояние объекта и разрушающая сам объектКонцепция абстрактного типаданных и её реализация в Си++• Абстрактным типом данных называется тип данныхс полностью скрытым (инкапсулированным)внутренним устройством• Работа с переменными абстрактных типов данныхпроисходит только через специальнопредназначенные для этого функции• Абстрактные типы данных реализуются с помощьюклассов и структур, в которых нет открытых членовэтих классов и структур, то есть внутреннее устройстводанных которых полностью скрыто от пользователя11Язык программирования Си++.Пример декомпозицииstruct student { char * name; // Имя студентаint year;// Год обученияdouble avb;// Средний баллint student_id;// Номер зачёткиchar * studentName ();int studentYearNumber ();int studentID ();};СвойстваОперации(методы)12Определение класса в Си++• Методы можно вызывать только для переменнойсоответствующего типа (класса), используя синтаксисдоступа к членам структуры данных:Today.init (9, 2, 2012);Later.addm (5);• При определении метода вне класса следует передего именем указывать имя того класса, к которому онотносится: void Date::init (int dd, int mm, int yy){ d = dd; m = mm; y = yy; };• Для объекта Today оператор m = mm означаетToday.m = mm, в вызове метода init для объекта Laterэтот же оператор означает Later.m = mm13Определение класса в Си++• Можно разрешать или ограничивать доступ к элементам классаиз любых функций, не являющихся членами этого класса(методы класса всегда имеют доступ ко всем элементам класса):class Date { int d, m, y; public: void init (int dd, int mm, int yy); };• public – открытые элементы класса, то есть доступныевсем внутри (методам класса) и вне определения класса• private – закрытые элементы класса, то есть доступныетолько внутри определения класса (методам класса)• protected – защищённые элементы класса, доступныетолько методам самого класса и его производных классов• По умолчанию элементы класса, введённые с помощьюключевого слова class, являются закрытыми, поэтому первуюметку private ставить не обязательно14Определение класса в Си++• Структуры (struct) и объединения (union) отклассов (class) отличаются только правиламиопределения прав доступа по умолчанию кпеременным и функциям класса: методы и данныеструктур (и объединений) по умолчанию открыты(public), а для классов – закрыты (private)• Запись struct имя_класса { ...
};эквивалентна: class имя_класса { public: ... };• Запись class имя_класса { ... };эквивалентна: struct имя_класса { private: ... };15Работа с состоянием объектаВстраиваемые функции• Спецификатор inline указывает компилятору, что ондолжен попытаться вставить в место вызова функциисаму её программу, а не команды формированияфактических параметров и обращения к функции спомощью стандартного (например, стекового)механизма:inline bool get_declare () { return declare; };• В некоторых случаях встраивание функций можетприводить к сокращению размеров программы16Указатели и ссылки на объекты• Кроме объектов существуют указатели на объекты:int * p, i = 5; // определение указателя и переменнойp = & i; // установка значения указателяi = i + 1;cout << i << * p;// напечатается “6 6”// так как i и * p – одно и то же• Допустимы обычные указатели, указатели наконстанты, константные указатели и константныеуказатели на константы:int*int* constconst int *int const *const int * constint const * constp;cp;pc;pc1;cc;cc1;////////////простой указательуказатель-константауказатель на константууказатель на константу (pc1 ≡ pc)указатель-константа на константууказатель-константа на константу (cc1 ≡ cc)Указатели и ссылки на объекты• Объявление параметра константой запрещаетфункции менять его значение:char * strcpy (char * p, const char * q);• Присваивать адрес переменной указателю наконстанту разрешено, присвоить адрес константыпростому указателю нельзя:int a;const int c = 2;const int * p1 = & c;const int * p2 = & a;// простая переменная// константа// указатель на константу// указатель на переменную// с запретом на её изменениеint * p3 = & c; // простому указателю присваивается// адрес константы, что запрещено в Си++* p3 = 7; // делается попытка изменить константу c(+)(+)(-)(-)18Указатели и ссылки на объекты• Тип “ссылка на переменную”:<тип> & <переменная>;• Ссылка является синонимом имени объекта ипредставляет сам объект:int i = 5;// Инициализация не обязательнаint & yet_i = i; // Ссылка обязана иметь начальное значение!// i и yet_i ссылаются на одно и то же целое число.// Инициировать ссылку константным значением можно,// если сама ссылка тоже константная:const int & yet_1 = 1; // ссылка на константу 1i = yet_i + 1;cout << i << yet_i; // напечатается “6 6”, поскольку// i и yet_i – одна и та же сущностьyet_i = 10;// i == 10& yet_i == & i; // Адрес ссылки равен адресу самого объекта!Указатели и ссылки на объекты• Значение ссылки нельзя изменить после еёинициализации• Выражение ++yet_i не приводит к изменениюссылки.
Операция увеличения применяетсянепосредственно к значению объекта, с которымсвязана ссылка, в данном случае к целому значению ipi:&iyetii:520Передача параметровпо ссылке• На языке Си процедура перемены местами двухобъектов выглядит так:void swap (int * px, int * py){ int temp; temp = * px; * px = * py; * py = temp; }• Вызов этой процедуры: int a = 5, b = 6; swap (&a, &b);• Та же процедура на Си++:void swap (int & x, int & y){ int temp; temp = x; x = y; y = temp; }• Вызов этой процедуры: int a = 5, b = 6; swap (a, b);21Конструкторы, как инициаторыполей данных классовclass Box{ double len, wid, hei;//для задания начальных значений всех трёх параметров параллелепипедов:public:Box (double l, double w, double h){ len = l; wid = w; hei = h; }// если часто используются кубики, то достаточно одного параметра:Box (double s){ len = wid = hei = s; }// если часто используются коробки одного типа, параметры не нужны:Box (){ len = 24; wid = 12; hei = 6; }// ещё один вариант конструктора умолчания:};Box (double l = 24, double w = 12, double h = 6){ len = l; wid = w; hei = h; }22Конструкторы, как инициаторыполей данных классов• Вызов конструкторов объектов при определении:Box b1 (1, 2, 3);Box b2 (5);Box b3;// конструктор умолчанияBox b31 (); // нельзя употреблять как конструктор:// возникает путаница с описанием заголовка функции!• Конструктор вызывается при явном создании объекта:Box * b4 = new Box (2.3); // v1 = b4 -> volume ()Box b5 = Box ();// конструктор умолчания// здесь путаница с заголовком функции не возникает!23Свойстваконструкторов объектов• У одного класса может одновременно существовать несколькоразных конструкторов, каждый из которых используется дляинициализации элементов особым образом.
Характеристики
Тип файла PDF
PDF-формат наиболее широко используется для просмотра любого типа файлов на любом устройстве. В него можно сохранить документ, таблицы, презентацию, текст, чертежи, вычисления, графики и всё остальное, что можно показать на экране любого устройства. Именно его лучше всего использовать для печати.
Например, если Вам нужно распечатать чертёж из автокада, Вы сохраните чертёж на флешку, но будет ли автокад в пункте печати? А если будет, то нужная версия с нужными библиотеками? Именно для этого и нужен формат PDF - в нём точно будет показано верно вне зависимости от того, в какой программе создали PDF-файл и есть ли нужная программа для его просмотра.