- •Составление таблицы истинности.
- •Основы алгебры логики.
- •Логические операции с высказываниями: конъюнкция, дизъюнкция, инверсия.
- •Законы логических операций. Таблицы истинности.
- •9.Понятие системы программирования.
- •10. Эволюция языков прогаммирования.
- •11. Элементы языков программирования.
- •12.Исходный, объектный и загрузочный модули.
- •13.Интегрированная среда программирования.
- •14. Методы программирования
- •15. Сущность методов программирования.
- •16. Методы программирования: структурный, модульный, объектно-ориентированный. Достоинства и недостатки методов программирования.
- •17.Общие принципы разработки программного обеспечения. Жизненный цикл программного обеспечения.
- •18. Типы приложений. Консольные приложения.
- •19. Типы приложений. Оконные Windows приложения.
- •20. Типы приложений. Web-приложения
- •21.Типы приложений. Библиотеки.
- •22.Типы приложений. Web-сервисы.
- •23.Константа — это составная часть программы; объект, имеющий значение,неизменная величина.
- •25.К простым типам данных относятся: порядковые и вещественные типы.
- •Int(X) Real, integer Real Целая часть числа
- •27.Структура программы на языке Турбо Паскаль
- •Var………..; {раздел объявления переменных}{±}
- •28.Оператор – инструкция, задающая определенные действия программы. Одним из операторов является оператор присваивания, который присваивает значение некоторого выражения некоторой переменной.
- •29.Оператор присваивания имеет следующую структуру:
- •31.Составной оператор
- •32.Синтаксис оператора if:
- •35.Строковый тип данных.
- •37.Объединение разнородных элементов (Запись)
- •39.Типы файлов Турбо Паскаль
- •41.Доступ к файлу в программе происходит с помощью переменных файлового типа. Переменную файлового типа описывают одним из трех способов:
- •42.Работа с типизированными файлами
- •43.Стандартные процедуры и функции
- •45. Процедуры и функции обработки текстовых файлов.
- •46 Процедуры и функции
- •47 Структура процедуры, описание процедур
- •48 Передача параметров, вызов процедуры
- •49 Локальные и глобальные данные
- •50 Структура функции, описание функции
- •51 Передача параметров, вызов функции
- •52 Модули
- •53 Интерфейсная часть модуля
- •54 Инициирующая часть модуля
- •55 Исполняемая часть модуля
- •56 Обращение к модулю из основной программы
- •57 Объекты
- •58 Основные принципы ооп
- •59 Описание объектов, иерархия объектов
- •60 Наследование записей
- •61 Понятие метода, определение метода, область действия метода
- •62 Стандартные библиотечные модули
- •63 Назначение модуля Dos
- •64 Назначение crt модуля
- •65 Структурное программирование
- •66 Алгоритм
- •67) Способы изображения алгоритмов.
- •68) Элементарные базовые управляющие структуры: линейная последовательность, ветвление.
- •69) Базовые структуры организации цикла: циклы со счётчиком и итерационные циклы.
- •70) Языки программирования.
- •I) машинно-зависимые языки.
- •II) машинно-независимые языки
- •71)Машинно-ориентированные языки и их характеристики.
- •74) Объектно-ориентированные языки программирования. Их достоинства и недостатки.
- •75) Используемые символы.
- •76) Константы.
- •77) Идентификаторы.
- •78) Ключевые слова.
- •79) Комментарии.
- •84) Переменные перечисляемого типа.
- •85) Массивы.
- •86) Структуры.
- •87) Объявления.
- •88) Поля битов.
- •89) Переменные с изменяемой структурой.
- •90.Определение объектов и типов:
- •91.Инициализация данных:
- •Операнды и операции:
- •Преобразования при вычислении выражений:
- •Операции отрицания и дополнения:
- •Операции разадресации и адреса:
- •Операция sizeof:
- •Мультипликативные операции:
- •Аддитивные операции:
- •Операции сдвига:
- •Поразрядные операции:
- •101 Наиболее употребимы двоичная, восьмеричная, десятичная и шестнадцатеричная система исчисления.
- •107 В языке си операции с высшими приоритетами вычисляются первыми. Наивысшим приоритетом является приоритет равный 1. Приоритеты и порядок операций приведены в табл. 8.
- •108 При выполнении операций происходят неявные преобразования типов в следующих случаях:
- •109 Любое выражение, которое заканчивается точкой с запятой, является оператором.
- •1.4.2. Пустой оператор
- •111 Составной оператор представляет собой несколько операторов и объявлений, заключенных в фигурные скобки:
- •Вопрос № 112 (Оператор if)
- •Вопрос №113 (Оператор switch)
- •Вопрос №114 (оператор break)
- •Вопрос №115 (оператор for )
- •Вопрос №116 (оператор while)
- •Вопрос № 117 (оператор do while )
- •Вопрос №118 (оператор continue)
- •Вопрос №119 (оператор return)
- •Вопрос №120 (оператор goto)
- •Вопрос №121 (определение и вызов функций)
- •Вопрос № 122 ( вызов функции с переменным числом параметров)
- •Вопрос № 123 (Передача параметров функции main)
- •Вопрос №124 (Исходные файлы и объявление переменных)
- •Вопрос № 125 (Объявления функций)
- •Вопрос № 126 (Время жизни и область видимости программных объектов)
- •Вопрос №127 (Инициализация глобальных и локальных переменных)
- •Вопрос № 128 (Методы доступа к элементам массива)
- •Вопрос № 129 (Указатели на многомерные массивы)
- •Вопрос № 130 (Операции с указателями)
- •Вопрос № 131 (Массивы указателей)
- •Вопрос № 132 (Динамическое размещение массивов)
- •Вопрос №133 (директива #include)
- •134. Директива #define
- •135. Директива #undef
- •136. Методы организации и хранения линейных списков
- •136. Методы организации и хранения линейных списков
- •137. Операции со списками при последовательном хранении
- •138. Операции со списками при связанном хранении
- •5)Частичное упорядочение списка
- •139. Организация двух связанных списков
- •140. Стеки и очереди
- •141. Пузырьковая сортировка
- •142. Сортировка вставкой
- •143. Сортировка посредством вывода
- •144. Слияние списков
- •145. Сортировка списков путем слияния
- •146.Последовательный поиск
- •147. Бинарный поиск
- •148. Методы вычисления адреса
- •150.Типы данных языка программирования
- •154. Типы данных
- •155. Выражения и оперпции
- •178) Поиск, удаление, замена и добавление символов в строке.
- •Int strcmp(const char *, const char *); лексикографическое сравнение строк
- •Int strncmp(const char *, const char *, size_t); лексикографическое сравнение первых n байтов строк
- •Int strcoll(const char *, const char *); лексикографическое сравнение строк с учетом локали collating order
- •180) Операции со строками
- •181) Объявление множества
- •182) Операции над множествами
- •183) Объявление файла
- •184) Файл последовательного доступа
- •185) Давайте сперва перед файлами произвольного доступа разберем режимы открытия:
- •187,188,189)Операции файла последовательного доступа. ( Открытие и закрытие и т.Д)
- •191) Объектно-ориентированное программирование
- •192) Основные принципы ооп.
- •193) История ооп
- •194)Базовые понятия ооп
- •195)Основные принципы ооп (Инкапсуляция, Наследие, Полиморфизм).
- •196) Событийно управляемое программирование
- •197) Компонентно-ориентированный подход
- •198) Классы объектов. Компоненты и их свойства.
- •199) Требования к аппаратным и программным средствам интегрированной среды разработки разработчика.
- •200)Интерфейс среды разработчика.
- •201. Чтобы использовать в проекте уже созданные ole-элементы управления, необходимо понимать, как создать проект, допускающий встраивание ocx-объектов, и как добавить в проект эти элементы.
- •202. Для добавления элементов к панели, созданную в предыдущей процедуре, перетащите элементы управления из раздела Редактор ленты на панели Панель элементов в представлении конструирования.
- •211. Виды классов:
- •215. Основными механизмами в объекто ориентированном программирование является полиморфизм, наследование и инкапсуляция.
- •220. Компиляция и запуск приложения
- •221. Создание оконных приложений в Visual Studio
- •222. У всех Windows-приложений фиксированная структура, определяемая функцией WinMain. Структура приложения, построенного из объектов классов библиотеки mfc, является еще более определенной.
- •223. При разработке программы использовались перечисленные ниже объекты и их методы.
211. Виды классов:
Базовый (родительский)
Производный (наследник, потомок)
Абстрактный
Инетфейс
Механизм классов позволяет создавать новые типы данных; с его помощью введены типы string, vector, complex и pair, рассмотренные выше. В мы рассказывали о концепциях и механизмах, поддерживающих объектный и объектно-ориентированный подход, на примере реализации класса Array. Здесь мы, основываясь на объектном подходе, создадим простой класс String, реализация которого поможет понять, в частности, перегрузку операций. (Классы подробно рассматриваются в главах 13, 14 и 15). Мы дали краткое описание класса для того, чтобы приводить более интересные примеры. Читатель, только начинающий изучение С++, может пропустить этот раздел и подождать более систематического описания классов в следующих главах.) Наш класс String должен поддерживать инициализацию объектом класса String, строковым литералом и встроенным строковым типом, равно как и операцию присваивания ему значений этих типов. Мы используем для этого конструкторы класса и перегруженную операцию присваивания. Доступ к отдельным символам String будет реализован как перегруженная операция взятия индекса. Кроме того, нам понадобятся: функция size() для получения информации о длине строки; операция сравнения объектов типа String и объекта String со строкой встроенного типа; а также операции ввода/вывода нашего объекта. В заключение мы реализуем возможность доступа к внутреннему представлению нашей строки в виде строки встроенного типа. Определение класса начинается ключевым словом class, за которым следует идентификатор – имя класса, или типа. В общем случае класс состоит из секций, предваряемых словами public (открытая) и private (закрытая). Открытая секция, как правило, содержит набор операций, поддерживаемых классом и называемых методами или функциями-членами класса. Эти функции-члены определяют открытый интерфейс класса, другими словами, набор действий, которые можно совершать с объектами данного класса. В закрытую секцию обычно включают данные-члены, обеспечивающие внутреннюю реализацию. В нашем случае к внутренним членам относятся _string – указатель на char, а также _size типа int. _size будет хранить информацию о длине строки, а _string – динамически выделенный массив символов. Вот как выглядит определение класса:
#include <iostream>
class String;
istream& operator>>( istream&, String& ); ostream& operator<<( ostream&, const String& );
class String { public: // набор конструкторов // для автоматической инициализации // String strl; // String() // String str2( "literal" ); // String( const char* ); // String str3( str2 ); // String( const String& );
String(); String( const char* ); String( const String& );
// деструктор ~String();
// операторы присваивания // strl = str2 // str3 = "a string literal"
String& operator=( const String& ); String& operator=( const char* );
// операторы проверки на равенство // strl == str2; // str3 == "a string literal";
bool operator==( const String& ); bool operator==( const char* );
// перегрузка оператора доступа по индексу // strl[ 0 ] = str2[ 0 ];
char& operator[]( int );
// доступ к членам класса int size() { return _size; } char* c_str() { return _string; }
private: int _size; char *_string; }
Класс String имеет три конструктора. Как было сказано в разделе 2.3, механизм перегрузки позволяет определять несколько реализаций функций с одним именем, если все они различаются количеством и/или типами своих параметров. Первый конструктор String(); является конструктором по умолчанию, потому что не требует явного указания начального значения. Когда мы пишем: String str1; для str1 вызывается такой конструктор. Два оставшихся конструктора имеют по одному параметру. Так, для String str2("строка символов"); вызывается конструктор String(const char*); а для String str3(str2); конструктор String(const String&); Тип вызываемого конструктора определяется типом фактического аргумента. Последний из конструкторов, String(const String&), называется копирующим, так как он инициализирует объект копией другого объекта. Если же написать: String str4(1024); то это вызовет ошибку компиляции, потому что нет ни одного конструктора с параметром типа int.
212. Класс - это тип. Этот производный тип вводится в программу с помощью специального оператора объявления класса. В объявлении класса используется ранее описанный инструментальный набор средств для построения и преобразования производных типов.
Очередное множество форм Бэкуса-Наура определяет синтаксис объявления класса.
Объявление ::= [СписокСпецификаторовОбъявления] [СписокОписателей];
СписокСпецификаторовОбъявления
::= [СписокСпецификаторовОбъявления] СпецификаторОбъявления
СпецификаторОбъявления ::= СпецификаторТипа
::= *****
СпецификаторТипа ::= СпецификаторКласса
::= УточнённыйСпецификаторТипа
::= *****
УточнённыйСпецификаторТипа ::= КлючевоеСловоКласса ИмяКласса
::= КлючевоеСловоКласса Идентификатор
::= enum ИмяПеречисления
КлючевоеСловоКласса ::= union
::= struct
::= class
ИмяКласса ::= Идентификатор
СпецификаторКласса ::= ЗаголовокКласса {[СписокЧленов]}
ЗаголовокКласса
::= КлючевоеСловоКласса [Идентификатор] [СпецификацияБазы]
::= КлючевоеСловоКласса ИмяКласса [СпецификацияБазы]
КлючевоеСловоКласса ::= union
::= struct
::= class
ИмяКласса ::= Идентификатор
Спецификатор класса представляет то, что называется объявлением класса. Уточнённый спецификатор типа объявляет расположенный за ним идентификатор именем класса. Уточнённый спецификатор обеспечивает неполное предварительное объявление класса и перечисления.
Назначение и смысл необязательного нетерминального символа СпецификацияБазы будут обсуждаться позже, в разделах, посвящённых наследованию.
Предварительное объявление обеспечивается уточнённым спецификатором типа и является своеобразным прототипом класса или перечисления. Его назначение - сообщение транслятору предварительной информации о том, что существует (должно существовать) объявление класса (или перечисления) с таким именем. Идентификатор, используемый в контексте уточнённого спецификатора имени становится именем класса (или именем перечисления).
Класс считается объявленным даже тогда, когда в нём полностью отсутствует информация о членах класса (пустой список членов класса). Неименованный класс с пустым множеством членов - уже класс!
Имя класса можно употреблять как имя (имя типа) уже в списке членов этого самого класса.
Класс может быть безымянным.
Следующая последовательность операторов объявления
class {}; /* Объявлен пустой неименованный класс.*/
class {};
class {};
class {};
/* Это всё объявления. Их количество ничем не ограничивается. */
struct {};
/* Структура - это класс, объявленный с ключевым словом struct.
Опять же пустой и неименованный.*/
не вызывает у транслятора никаких возражений.
На основе класса, пусть даже неименованного, может быть объявлен (вернее, определён) объект-представитель этого класса. В таком контексте объявление неименованного (пусть даже и пустого!) класса является спецификатором объявления. Имена определяемых объектов (возможно с инициализаторами) составляют список описателей.
class {} Obj1, Obj2, Obj3;/* Здесь объявление пустого класса.*/
class {} Obj4, Obj5, Obj6;/* Просто нечего инициализировать.*/
class {} Obj1;
/* ^ Ошибка. Одноименные объекты в области действия имени.*/
Неименованные классы также можно применять в сочетании со спецификатором typedef (здесь может быть объявление класса любой сложности - не обязательно только пустой). Спецификатор typedef вводит новое имя для обозначения безымянного класса. Описанное имя типа становится его единственным именем.
Сочетание спецификатора typedef с объявлением безымянного класса подобно объявлению класса с именем:
class MyClass {/*…*/};
typedef class {/*…*/} MyClass;
Правда в первом случае класс имеет собственное имя класса, а во втором - описанное имя типа. Использование описанного имени типа в пределах области действия имени делает эквивалентными следующие определения (и им подобные):
class {} Obj1;
MyClass Obj1;
Класс считается объявленным лишь после того, как в его объявлении будет закрыта последняя фигурная скобка. До этого торжественного момента информация о структуре класса остаётся неполной.
213-214. Свойства классов (property) – это атрибут формы или другого компонента, который влияет либо на визуальное поведение, либо на операции, выполняемые формой или компонентами. Фактически свойство – это просто имя, связанное с полем напрямую или методами записи и/или чтения и наиболее видимая часть класса.
При использовании в этом точном техническом значении, термин обозначает расширение концепции поля данных. Свойство является элементом определения класса и обеспечивает специальную защиту связанных с ним данных, поддерживая их автоматическую настраиваемую обработку при просмотре и изменении значений. Другими словами, свойство не являются только данными, которые присваиваются и используются; присвоение и/или использование этих данных может привести к особым побочным эффектам. Это один из часто используемых вариантов реализации инкапсуляции.
Синтаксис объявления свойства класса:
Property <имя свойства>: <тип данных> [Index <целое число>} [Read <поле свойства\метод чтения>] [Write <поле свойства\метод записи>} [Stored <логическое выражение>] [Default <значение по умолчанию>|NoDefault] [DispID <целое число>] [Implements <список интерфейсов>
Примечания: • Delphi позволяет объявлять свойства следующих типов: • простые типы, включая целые и вещественные числа, например Width, Height, символьные, перечислимые (например цвет формы, компонентов), логические (False, True) и диапазоны; • строковые, например имена компонентов (Name), заголовки (Caption), значения (Text): ✓ множества, например Borderlcons (biSystemMenu, biMinimize, biMaximize, biHelp). Раз-мер публикуемых (Published) свойств типа множество ограничен 32 элементами (0..31). С большим числом элементов можно объявить свойство в разделе Public; ✓ массивы, включая многомерные, например Lines (TStrings). Нельзя объявлять такие свойства в разделе Published. Массивы обычно имеют встроенные редакторы для изменения значений; ✓ указатели; • Объявление свойства никогда не приводит к резервированию памяти для хранения значений свойства, поскольку экземпляр класса хранит значение свойства в одном из соответствующих своих полей. • Свойства должны объявляться после объявления полей, можно вперемежку с методами. Главное, чтобы упоминаемые в разделах Read и Write методы были описаны ранее. • Поля и/или методы доступа могут быть унаследованными, но видимыми потомком. • Свойства, как и поля, могут использоваться в качестве аргументов процедур и функций, а также участвовать в выражениях, например логических, математических. Нельзя, однако, передавать их по ссылке (как Var параметр), • Свойство должно иметь хотя бы один из разделов Read или Write. Если раздел Read отсутствует, то свойство доступно только для записи, например, для хранения пароля, а, если отсутствует раздел Write, то свойство годится только для чтения и его нельзя модифицировать. • Если потребности в специальных методах нет, то для доступа к полям можно вместо имен методов использовать имена полей. Чаще всего так делают для раздела Read. • Методы чтения и записи рекомендуется объявлять в разделе Protected, чтобы их нельзя было неосторожно изменить, а также виртуальными или динамическими, чтобы была возможность переопределить их в потомках. Методы, однако, не должны быть абстрактными (Abstract) или перегружаемыми (Overload). • Если в разделах Read и Write указаны методы, то типы данных поля и свойства могут не совпадать. В этом случае соответствующие преобразования типов должны производится в методах чтения и записи. • Свойства, как и другие составляющие класса, наследуются потомками.
Важное значение имеют свойства при разработке компонентов. Разработчик может менять реализацию методов, а для пользователей все остается по старому.
В простейшем случае может использоваться прямой доступ к полю. Чаще всего прямой доступ используется при операциях чтения значения поля.
