- •1. Основные операции языка Си.
- •3. Язык Си: указатели и массивы. Определения, примеры.
- •4. Язык Си: объявления функций, передача аргументов. Примеры.
- •5. Язык Си: строки и указатели. Определения, примеры.
- •8. Язык Си: структуры. Пример.
- •9 . Язык Си: битовые поля и объединения. Примеры.
- •10. Язык Си: оператор определения типа. Примеры.
- •11.Язык Си: препроцессор. Директивы препроцессора, примеры
- •12.Язык Си: программный стек. Пример работы стека.
- •13. Линейные списки. Операции с линейными списками.
- •14 Hash-таблицы
- •15 Двоичные деревья
- •17. Язык Си: ссылочные типы. Пример.
- •18. Язык Си: защита указателей и объектов, неявное изменение объектов.
- •19. Язык Си: организация ввода/вывода. Пример: слияние файлов. Организация ввода/вывода
- •Открытие файла
- •Закрытие файла
- •Ввод из файла
- •Вывод в файл
- •Особые ситуации
- •Пример: слияние файлов
- •20. Язык Си: произвольный доступ к файлам. Пример.
- •22. Язык Си: примеры реализаций функций ввода/вывода (getc,putc).
- •23. Язык Си: примеры реализаций функций ввода/вывода (fgets, fputs).
- •24. Язык Си: работа с файловой системой. Пример.
- •25. Основные понятия ооп: абстракция, инкапсуляция, наследование, полиморфизм.
- •27. Объекты классов: статические,автоматические, динамические. Примеры.
- •28. Управление доступом к элементам классов. Пример.
- •29. Шаблоны функций и шаблоны классов. Примеры.
- •30. Наследование. Пример.
- •31. Множественное наследование. Пример.
- •П оскольку классы-потомки наследуют все данные и методы классов-предков, в итоге имеем следующую картину:
- •32. Виртуальные функции. Раннее и позднее связывание.
- •33. Абстрактные классы. Их назначение, пример.
- •34. Полиморфный контейнер (пример).
- •36. Конструкторы, их виды, примеры. Вызов конструкторов при наследовании.
- •37. Деструкторы. Их назначение, примеры.
- •39. Перегруженные операции. Примеры.
- •40. Обработка нештатных ситуаций. Объекты-исключения. Примеры.
- •Вопрос 1: какова дальнейшая судьба этих ресурсов, будут ли они освобождены?
- •Вопрос 2: как распознавать подобные ситуации и корректно их обрабатывать?
- •41. Модели жизненного цикла программного обеспечения. Модели жизненного цикла по
- •Спиральная модель жизненного цикла по.
- •42. Проектирование программного обеспечения и uml.
- •Uml (основные понятия)
- •Канонические диаграммы языка uml 2.X
- •43. Диаграммы прецедентов. Нотация, семантика, примеры.
- •Основные обозначения на диаграммах прецедентов:
- •44. Сценарии выполнения прецедентов (пример).
- •45. Диаграммы классов. Нотация, семантика, отношения.
- •46. Атрибуты на диаграммах классов. Нотация и семантика. Примеры.
- •47. Операции на диаграммах классов. Нотация и семантика. Примеры.
- •48. Отношения ассоциации на диаграммах классов.
- •Отношения ассоциации
- •Предприятие
- •Сотрудник
- •Отношения обобщения
- •Отношения композиции
- •53. Язык c#: сборки, манифесты, домены, компоненты.
- •55. Java как язык ооп для машинно-независимых приложений.
- •56. Обзор Java-технологий NetBeans ide.
- •57. Компонентные технологии разработки программного обеспечения.
- •59.Обёртки в языках c# и Java.
- •60. Архитектурный паттерн mvc. Область применения, схема взаимодействия.
27. Объекты классов: статические,автоматические, динамические. Примеры.
Пусть имеется такое описание:
class Х { // описан класс Х ( это похоже на описание структуры)
public: // доступ извне к элементам класса разрешен
chat *data; // элемент данных класса Х
void f(void); // функция-член класса Х
};
Х а; // описан а - объект класса Х
static X v[10]; // описан v - статический массив объектов класса Х
Х *рх =new Х; // описан рх - указатель на объект класса Х
Доступ извне описания класса к элементам данных и членам класса
осуществляется (если он разрешён) с помощью уточненных имен:
Х::data - уточненное имя элемента данных data класса Х
Х::f() — - уточненное имя функции-члена f() класса Х
Если имеется объект а класса Х и указатель рх на объект класса Х, тогда
доступ извне класса осуществляется (если он разрешён) следующим образом:
а.data или рх->data - доступ к элементу данных извне класса
а.f() или рх->f() - вызов функции-члена извне класса
Доступ изнутри класса к элементам данных и функциям-членам класса
возможен по их простым именам. Кроме того, у любой функции-члена класса
всегда имеется неявный аргумент с именем this.
Неявный аргумент this есть указатель на тот объект класса, для которого эта
функция-член вызывается.
Например, пусть имеется объект а класса Х.
Тогда this <-> &а, и внутри любой функции-члена класса возможны следующие
корректные обращения:
this -> data - доступ к элементу данных из функции-члена класса
this -> f() - вызов функции-члена из другой функции-члена класса
Пример 1. Статические данные и методы классов
class S{
static int a; // статический элемент данных класса
public:
static void h(S* ){} // статический метод класса
};
void main(void) {
S obj , &objref=obj,*pobj=&obj,v[9]; // объект, ссылка, указатель, массив
h (&obj); // это ошибка!
obj.h(pobj); // это правильно
pobj->h(&obj); // это тоже правильно
}
28. Управление доступом к элементам классов. Пример.
Управление доступом к элементам классов по существу позволяет управлять степенью инкапсуляции в классе. Сокрытие данных и методов защищает объекты от несанкционированного доступа и от непреднамеренной порчи.
Рассмотрим значения следующих ключевых слов:
Private - элементы класса доступны методам этого класса и дружественным функциям. Private есть значение по умолчанию.
Protected - элементы класса доступны методам этого класса, методам
производных от него классов и дружественным функциям.
Public - элементы класса доступны любым функциям текущего проекта.
Friend - открывает доступ к элементам класса для функций, не являющихся
методами данного класса (т.e. объявляет дружественные функции), а также
используется для объявления дружественных классов.
class CPoint { // это пример сокрытия данных
protected:
int Х, Y; // координаты точки
public:
CPoint ( int a, int b ) { X = a; Y = b; } // конструктор объекта
int GetX( ) {return X; } // получить координату Х
int GetY( ) {return Y; } // получить координату Y
};
void main ( void ) { CPoint point ( 10, 20 ); }
Каким образом регулируются права доступа к элементам классов при наследовании классов? Рассмотрим следующую синтаксическую конструкцию:
class Derived: <модификатор-доступа> Base { ...... };
Здесь Base - базовый класс (предок), а Derived - производный класс (потомок).
Таблица определения прав доступа при наследовании |
||
Base |
<модификатор-доступа> |
Derived |
private |
private |
не доступны |
protected |
private |
private |
public |
private |
private |
private |
public |
не доступны |
protected |
public |
protected |
public |
public |
public |