- •Вопрос 1 - Определение алгоритма
- •1.4 Разновидности структур алгоритмов
- •Вопрос 2 - языки программирования
- •1. Машинно – ориентированные языки
- •1.2 Языки Символического Кодирования
- •1.3 Автокоды
- •1.4 Макрос
- •2. Машинно – независимые языки
- •2.1 Проблемно – ориентированные языки
- •Вопрос 4 - ооп
- •Вопрос 5 - Инкапсуляция, наследование, полиморфизм
- •Вопрос 6 - Классификация ос
- •Вопрос 7 - Характеристики, функции, структура ms Win
- •Вопрос 8 - Характеристики unix
- •Вопрос 9 - Понятия программы, программной системы (комплекса), программного продукта (средства, изделия), программного обеспечения.
- •Вопрос 10. Логические этапы разработки программного продукта. Системный анализ.
- •Проектирование
- •Программирование
- •Отладка и тестирование
- •Документирование
- •Оценка качества программного обеспечения
- •Вопрос 11. Основные методы проектирования (по направления декомпозиции).
- •Вопрос 12. Проектирование интерфейса пользователя (определение, классификация, требования).
- •Вопрос 13. Тестирование и отладка. Объекты и особенности процесса тестирования.
- •Вопрос 14. Классификация ошибок с точки зрения процесса разработки.
- •Вопрос 15. Основные программные и эксплуатационные документы
- •Вопрос 16. Методы оценки свойств программного продукта
- •Вопрос 17. Факторы качества программы: надежность, сопровождаемость, эффективность, удобство использования, универсальность, корректность
- •Вопрос 18 - Файловая организация внешней памяти. Каталог, дескриптор
- •Каталоги
- •Вопрос 19 - Загрузка выполняемых файлов в оперативную память. Организация динамического выделения памяти
- •Вопрос 20 - Программные средства управления внешними устройствами. Драйвер – назначение и структура
- •Вопрос 21 - Понятие базы данных (бд), системы управления базами данных (субд), банка данных (БнД)
- •Вопрос 22 - Модели данных
- •Вопрос 23 - Этапы проектирования бд
- •1. Формирование и анализ требований
- •2. Концептуальное проектирование
- •4. Физическое проектирование.
- •Вопрос 24 - Методы проектирования бд
- •Вопрос 25 - Роль нормализации при проектировании бд
- •Вопрос 26. Классификация языков моделирования.
- •Вопрос 27. Статистические методы обработки результатов.
- •Вопрос 28. Системы массового обслуживания. Понятия: цепь, поток событий, очереди.
- •1.2. Основные понятия.
Вопрос 4 - ооп
Приемы процедурного программирования концентрируются на алгоритмах, используемых для решения задачи. При этом не обращается внимание на структуры данных, задействованные функциями, как на отдельные части организации программы. В противоположность этому, объектно-ориентированное программирование концентрируется на сути задачи, для которой пишется программа: элементы программы разрабатываются в соответствии с объектами в описании задачи. Общий подход ООП состоит в определении набора объектных типов. Объектные типы – это модули, интегрирующие структуры данных, которые представляют эл-ты задачи, с операциями, необходимыми для выработки решения. Как только эти объектные типы определены, создаются образцы объектов для конкретной задачи и вызываются операции для произведения обработки.
В С++ классы служат для представления объектных типов, а функциональные эл-ты предоставляют средства для встраивания операций в тип.
Объектно-ориентированное программирование программ – это расширение использования абстракции данных. Абстрактные типы данных, или объектные типы, не только скрывают структуру данных, но и инкапсулируют и само функционирование как операции над объектами. Суть, объектно-ориентированного программирования состоит в нахождении наиболее подходящих объектных типов.
Хороший способ проектирования объектных типов состоит в поиске существительных (объектов) и глаголов (операций) в описании решаемой задачи. Другой аспект ООП – использование наследования для создания специализированных версий базовых объектных типов. Вместо создания совершенно другого объектного типа для каждой программы можно строить новые типы из общих базовых типов.
Новое в ООП – это рассмотрения программ как реализаций объектных типов, а не как реализаций алгоритмов.
Следующий аспект – состоит в определении родового типа. Допустим, в программе обработки списков есть “списки рабочих”, ”списки телефонов” и ”списки адресов”. Все эти списки с различными типами эл-тов могут быть построены как сущности родового типа список. Родовой тип – вместилище других типов. Хорошее объектно-ориентированное программирование ясно соответствует задаче, которую должна решать программа, упрощая понимание, реализацию и сопровождение программы.
Доступ к полям данных
Давайте посмотрим, как мы могли бы определить тип потока вывода ostream. Чтобы упростить задачу, предположим, что для буферизации определен тип streambuf. Тип streambuf на самом деле определен в , где также находится и настоящее определение ostream. Пожалуйста, не испытывайте примеры, определяющие ostream в этом и последующих разделах; пока вы не сможете полностью избежать использования , компилятор будет возражать против переопределений. Определение типа, определяемого пользователем (который в C++ называется class, т.е. класс), специфицирует данные, необходимые для представления объекта этого типа, и множество операций для работы с этими объектами. Определение имеет две части: закрытую (private) часть, содержащую информацию, которой может пользоваться только его разработчик, и открытую (public) часть, представляющую интерфейс типа с пользователем:
class ostream {
streambuf* buf;
int state;
public:
void put(char*);
void put(long);
void put(double);
}
Описания после метки public задают интерфейс: пользователь может обращаться только к трем функциям put(). Описания перед меткой public задают представление объекта класса ostream; имена buf и state могут использоваться только функциями put(), описанными в открытой части. class определяет тип, а не объект данных, поэтому чтобы использовать ostream, мы должны один такой объект описать (так же, как мы описываем переменные типа int):
ostream my_out;
Считая, что my_out был соответствующим образом проинициализирован его можно использовать например так:
my_out.put("Hello, world\n");
С помощью операции точка выбирается член класса для данного объекта этого класса. Здесь для объекта my_out вызывается член функция put(). Функция может определяться так:
void ostream::put(char* p)
{
while (*p) buf.sputc(*p++);
}
где sputc() - функция, которая помещает символ в streambuf. Префикс ostream необходим, чтобы отличить put() ostream'а от других функций с именем put(). Для обращения к функции члену должен быть указан объект класса. В функции члене можно ссылаться на этот объект неявно, как это делалось выше в ostream::put(): в каждом вызове buf относится к члену buf объекта, для которого функция вызвана.
Можно также ссылаться на этот объект явно посредством указателя с именем this. В функции члене класса X this неявно описан как X* (указатель на X) и инициализирован указателем на тот объект, для которого эта функция вызвана. Определение ostream::put() можно также записать в виде:
void ostream::put(char* p)
{
while (*p) this->buf.sputc(*p++);
}
Операция -> применяется для выбора члена объекта, заданного указателем.
