Базовые принципы объектно-ориентированного программирования (пакетирование, наследование, полиморфизм, передача сообщений). - Программирование
Учебные материалы


Базовые принципы объектно-ориентированного программирования (пакетирование, наследование, полиморфизм, передача сообщений). - Программирование



Инкапсуляция = Пакетирование – это объединение данных и функция для работы с этими данными в абстрактные типы данных, называемых классами.

Пакетирование связано с создание объектной модели и предполагает соединение в одном объекте данных и функций, которые манипулируют этими данными, причем доступ к некоторым данным может быть запрещён снаружи и ими можно манипулировать только внутри этого объекта.

Наследование – это порождение новых абстрактных типов данных(производных классов) на основе существующих абстрактных типов данных(базовых классов).

Наследование позволяет использовать библиотеки классов. Библиотеки классов могут рассматриваться как базовая иерархическая структура. Для каждой конкретной программы, использующей библиотеку, выбирается некоторая подструктура этой библиотеки, которая может быть расширена. Окончательно полученная подструктура – базовая иерархическая структура. На основе одного класса строится другой.

Полиморфизм позволяет использовать одни и те же функции для решения разных задач. Полиморфизм: общий, чистый и параметрический.

Общий включает перегрузку операций, функций, преобразование типов.

Чистый – построение виртуальных функций и абстрактных классов.

Параметрический – использование шаблонов функций и их классов.

Передача сообщений выражает основную методологию построения объектно-ориентированных программ, как совокупность объектов, взаимодействующих друг с другом.

16. Базовые конструкции объектно-ориентированных программ (определение объектов).

При объявлении класса описываются компоненты-данные и объявляются компоненты функции.

Объявление компонент- функции содержит описание имени функции, типов её параметров и возвращаемого значения.

Описание функции задает описание её тела. Далее описываются объекты этого класса.

Описание объекта – это выделение памяти, структура которой соответствует описанию класса. Возможна инициализация некоторых компонент данных.

Одной из функций класса является создание объекта, выполняющееся функцией-конструктором. Конструктор управляет выделением памяти для объекта, строит и может инициализировать компоненты данных(конструирует объект в памяти).

Две характеристики объекта:

- интерфейс – показывает как объект общается с внешней средой и другими объектами.

- интерфейс и реализация должны быть максимально независимы друг от друга.

Пример объекта(рисунок нарисовать потом!!!):

17. Базовые конструкции объектно-ориентированных программ (определение классов).

Определение нового класса предполагает установление отношений наследования между этим классом и существующими.

Отношение наследования позволяет:

1) выразить общность интерфейсов базового и производного классов.

2) Осуществлять развитие и совершенствование программ без изменения того, что было раньше.

Это осуществляется за счет того, что производный класс «больше» и « могучее» базового класса, может использовать без изменений некоторые или все функции базового класса, может заменить старые версии функций базового класса новыми версиями тех же функций, ввести новые данные и новые функции в производный класс.

Интерфейс базового класса является частью интерфейса производного класса.

(тут надо нарисовать картинку)

18. Обработка исключений (определения, принципы, реализация).

(тут тоже надо нарисовать картинку)

Методы обработки исключений:

1) Поиск ошибок внутри класса, осуществлять их обработку за пределами класса

2) Осуществлять явное разделение основного кода и кода обработки ошибок.

Выявление и устранение ошибок.

Некоторые основные свойства и правила использования механизма обработки исключений:

1) механизм обработки исключений обеспечивает прерывание программы в заранее определенных точках, где обнаружено отклонение от её нормального выполнения;

2) при прерывании программы управление и, возможно, данные передаются из точки прерывания в определенную ранее точку программы, где обрабатывается исключение;

3) для поддержки механизма обработки исключений в язык Си введены три ключевых слова: throw, try, catch;

4) Блок кода, в котором может возникнуть исключение, должен следовать после ключевого слова try и далее должен быть заключен в фигурные скобки; после этого блока должен идти хотя бы один блок, начинающийся словом catch, тоже заключенный в фигурные скобки, который называется обработчиком исключений.

5) Исключения могут быть любого типа(наиболее часто используются исключения типа class или struct);

6) В программе возникает исключение, когда управление передаётся инструкции throw...;

7) Инструкция throw всегда передает управление ближайшему найденному обработчику исключения, т.е. обработчику, чей try блок был выполнен последним;

8) Выражение throw operand строит временный статический объект типа operand и использует его для соответствующего обработчика исключений;

9) Список исключений задается при объявлении функции f; попытка со стороны функции f сгенерировать исключение, которого нет в списке исключений, приводит к автоматическому вызову функции unexpected;

10) Обработчик catch(...) обрабатывает любое исключение независимо от его типа;

11) Поиск соответствующего обработчика исключений осуществляется в той последовательности, в которой эти обработчики встречаются в программе;

12) После завершения выполнения блока обработчика исключения управление передается в конец списка всех обработчиков исключений для соответствующего блока try;

13) Для выхода из блоков catch и try нельзя использовать инструкцию goto.

19. Динамическое выделение и освобождение памяти на языке С++ (определения, виды памяти).

Именованный объект является либо статическим, либо автоматическим. Статический объект размещается в памяти в момент запуска программы и существует там до её завершения. Автоматический объект размешается в памяти всякий раз, когда управление попадает в блок, содержащий определение объекта, и существует только до тех пор, пока управление остается в этом блоке. Тем не менее, часто бывает удобно создать новый объект, который существует до тех пор, пока он не станет ненужным. В частности, бывает удобно создать объект, который можно использовать после возврата из функции, где он был создан.

Подобные объекты создает операция new, а операция delete используется для их уничтожения в дальнейшем. Про объекты, созданные операцией new, говорят, что они размещаются в свободной памяти.

Объект, созданный с помощью операции new, существует до тех пор, пока он не будет уничтожен явно операцией delete. После этого память, которую он занимал, вновь может использовать new.

Операндом delete может быть только указатель, который возвращает операция new или нуль. Применение delete к нулю не приводит ни к каким действиям.

Операция new может также создавать массивы объектов. Простой оператор delete уничтожает отдельные объекты, а операция delete[] используется для уничтожения массивов.

Оператор new имеет один операнд и записывается в двух формах:

new type_name

new (type_name)

Оператор delete также можно записать в двух формах:

delete cast_expression //обычная форма

delete[] cast_expression //обычная форма

Постфикс [] гарантирует использование глобальной версии оператора delete.

20. Поддержка абстрактных типов данных и объектно-ориентированного программирования на языке С++ (определения, особенности, реализация).

1) Средства введения классов содержат описание данных и функций, манипулирующих этими данными, механизмы для ограничения или запрета доступа к компонентам класса.

2) Средства введения объектов и средств их инициализации и разрушения.

3) Средства для поддержки операций копирования объектов.

4) Поддержкой специальных конструкций – шаблонов, называемых templates или специальных описаний для семейства взаимосвязанных классов.

5) Поддержкой специальных средств для обработки ошибочных и исключительных ситуаций.

6) Поддержкой преобразования типов для абстрактных типов данных.

Описание класса разделяется на 2 группы: private и public. Имена описанные в первой части класса могут быть использованы только функциями-членами данного класса. Доступ же к членам-данным второй(общей) части имеет вся область видимости этого класса. Также доступ к компонентам базового класса из производного может быть ограничен с помощью специальных атрибутов(private, public, protected). Protected отличается от private только тем, что доступен не только в текущем, но и в дочерних классах.

Доопределение операторов – процедура расширения функциональных возможностей операторов. По умолчанию при копировании объектов новому передаются все свойства, присущие исходному объекту, что не всегда удобно. Иногда необходимо копировать лишь некоторые из имеющихся у объектов свойств.

Доопределение операторов.

Функция operator может быть использована для расширения области приложения следующих операторов: +, -, *, /, %, ^, &, |, !, =, , +=, -=, *=, /=, %=, ^=, <>, ==, ++, --, [], (), new, delete и т.д.

Синтаксис: operator

Некоторые свойства и правила доопределения операторов:

1) компилятор различает операторы путем проверки числа и(или) типов их операндов(аргументов).

2) Ключевое слово operator, после которого записывается символ доопределяемого оператора задает имя функции, в теле которой должны быть описаны действия, выполняемые доопределяемым оператором.

3) Разрешается доопределять глобальные и локальные операторы, которые доопределяются функцией operator, являющейся компонентом некоторого класса.

4) Функцию operator можно вызывать по имени.

5) Операторы [], =, (), -> можно доопределить только с помощью нестатической функции operator, являющейся компонентом класса.

6) За исключением оператора присваивания, все операторы, доопределенные в базовом классе, наследуются в любом производном классе.

7) А исключением доопределения операторов new и delete функция operator должна быть нестатическим компонентом-функцией, либо иметь как минимум один аргумент типа кола или ссылка на класс.

8) Глобальные операторы new можно доопределить, а глобальные операторы delete не могут быть доопределены.

9) Локальные operator new и operator delete являются статическими компонентами класса, в котором они определены.

10) Доопределенный оператор не может иметь аргументы, заданные по умолчанию.

21. Классы в языке С++ (class, struct, union, вложенные классы, компоненты-данные и компоненты-функции).

Класс – это определенный пользователем тип, выполненный с помощью ключевого слова class.

Данные, объявленные в классе, называются компонентами-данными. Функции, объявленные в класса называются компонентами-функциями.

Доступ к объектам класса может ограничиваться множеством функций, описания которых входят в описание класса. Эти функции называются функциями-членами и друзьями. Для создания объектов класса используются специальные функции-члены, называемые конструкторами. Можно описать специальную функцию-член для удаления объектов класса при его уничтожении. Такая функция называется деструктором.

По определению структура – это класс, все члены которого общие, т.е. описание struct s {... это просто краткая форма описания class s{public: ...

Смесь определяется как структура, все члены которой имеют один и тот же адрес. Если известно, что в каждый момент времени используется значение только одного члена структуры, объявив её объединением, можно сэкономить память.

Смеси бывают анонимными и поименованными.

Один класс можно объявить в другом классе. В этом случае внутренний класс называется вложенным.

Доступность вложенного класса ограничивается областью видимости лексически обобщающего класса. Но если описание вложенного класса не является совсем простым, то лучше описывать этот класс отдельно, поскольку вложенные описания могут стать очень запутанными.

Полезное свойство вложенности – это сокращение числа глобальных имен, а недостаток его в том, что оно нарушает свободу использования вложенных типов.

Имя класса-члена(вложенного класса) можно использовать вне описания объемлющего его класса так же, как имя любого другого члена.

Class X{

struct M1{

int m;

};

public:

struct M2{int m;};

}

void main(){

M1 a; //ошибка: имя M1 вне области видимости

M2 b; //ошибка: имя M2 вне области видимости

X::M1.m; //ошибка: X::M1 частный член

X::M2.m; //все нормально

}

22. Конструкторы и деструкторы. Создание и уничтожение объектов на языке С++.

Функция, позволяющая инициализировать объект в процессе его объявления, называется конструктором.

Основные свойства и правила использования конструкторов:

1) конструктор не наследуется в производных классах; конструктор производного класса может быть вызван для его базовых классов;

2) конструктор может иметь аргументы, заданные по умолчанию;

3) конструктор – это функция, он она не может быть виртуальной;

4) невозможно получить в программе адрес конструктора;

5) если конструктор не задан в программе, то он будет автоматически сгенерирован компилятором для построения соответствующих объектов;

6) конструктор по умолчанию для класса X – это конструктор, который может быть вызван без аргументов;

7) конструктор вызывается автоматически только при описании объекта;

8) объект, содержащий конструктор, нельзя включить в виде компонента в объединение;

9) конструктор класса X не может иметь аргумента типа X;

10) конструктор класса X может иметь аргумент типа &X(ссылку на объект типа X);

11) конструктор, заданный в виде X::X(const X&), называется конструктором для копирования класса X;

12) для конструктора работает механизм доопределения имени.

Функцию, использующуюся для разрушения объекта, называют деструктором. Деструктор имеет то же имя, что и класс, с префиксом тильда(~).

Основные свойства и правила использования деструкторов:

1) деструктор не возвращает значения;

2) деструктор не наследуется в производных классах;

3) производный класс может вызвать деструкторы для его базовых классов;

4) деструктор не имеет параметров;

5) класс может иметь только один деструктор;

6) деструктор – это функция, и он может быть виртуальным(его можно объявить с ключевым словом virtual);

7) невозможно получить в программе адрес деструктора(указатель на деструктор);

8) если деструктор не задан в программе, то он будет автоматически сгенерирован компилятором для уничтожения соответствующих объектов(все деструкторы, сгенерированные компилятором имеют атрибут public);

9) деструктор можно вызвать также, как обычную функцию, если использовать его полное имя;
деструктор вызывается автоматически при разрушении объекта;

10) объект, содержащий деструктор нельзя включить в виде компонента в объединение(union);

11) когда вызывается библиотечная функция exit(), вызываются деструкторы только для глобальных объектов;

12) когда вызывается библиотечная функция abort(), никакие деструкторы не вызываются;

13) если память под объект выделена через указатель с помощью оператора new, то при прекращении существования этого указателя объект автоматически не разрушается(для разрушения объекта надо использовать оператор delete).

Если у класса есть конструктор, он вызывается всякий раз при создании объекта этого класса. Если у класса есть деструктор, он вызывается всякий раз, когда уничтожается объект этого класса.

Объект может создаваться как:

1) глобальный, который создается в начале выполнения программы и разрушается при её завершении;

2) автоматический, который создается каждый раз, когда его описание встречается во время выполнения программы, и уничтожается по выходе из блока, в котором он был описан;

3) статический, который создается один раз при запуске программы и уничтожается при ее завершении;

4) объект в свободной памяти, который создается операцией new и уничтожается операцией delete;

5) объект-член, который создается в процессе создания другого класса или при создании массива, элементом которого он является;

6) объект – элемент массива;

Основные правила создания и уничтожения объектов:

1) глобальные объекты конструируются в порядке их объявления в начале выполнения программы и разрушаются в обратном порядке при завершении программы;

2) локальные объекты конструируются, когда встречаются их объявления, и разрушаются при выходе из блока программы, к котором они были объявлены.

23. Организация доступа к компонентам классам на языке С++ (friend, static, public и др.).

Описание класса разделяется на 2 группы: private и public. Имена описанные в первой части класса могут быть использованы только функциями-членами данного класса. Доступ же к членам-данным второй(общей) части имеет вся область видимости этого класса.

Функция может быть объявлена так, сто ей разрешается только читать значения членов-данных этого класса, и не разрешается менять эти значения(ограничения к компонентам объекта). Для описания такого вида функций используют спецификатор const.

Пример:

Class my_class{

Int x,y;

public:

void read(int &X, int&Y)const{X=x,Y=y}

}

Основные правила использования спецификатора const для доступа к компонентам-данным:

1) компоненты-функции со спецификатором const можно вызвать для объектов со спецификатором const;

2) компоненты-функции без спецификатора const нельзя вызвать для объектов со спецификатором const;

3) компоненты-функции со спецификатором const не могут изменить значение компонента объекта без явной записи указателя this.

Для организации внешнего доступа к локальным компонентам класса используется спецификатор friend.

Функция-не член класса, имеющая доступ к закрытой части, называется другом класса.

Для того, чтобы функция стала другом класса, необходимо в его описании объявить эту функцию используя friend.

Компонент-функция одного класса может быть объявлена с friend для другого класса. Все функции одного класса могут являться друзьями для другого класса: friend class y;

Основные свойства и правила использования спецификатора friend:

1) friend-функции не являются компонентами класса, но получают доступ ко всем его компонентам независимо от атрибутов этих компонентов;

2) если friend-функции одного класса не являются компонентами другого класса, то они вызываются так же как и обычные глобальные функции, т.е. в этом случае не надо использовать операторы ссылки(. Или ->);

3) если friend-функции одного класса не являются компонентами другого класса, то они не имеют указателя this;

4) friend-функции не наследуются в производных классах;

5) отношение friend не является транзитивным, т.е. из двух отношений A friend B и B friend C не следует что A friend C;

Класс – это тип, а некоторое данное, и для каждого объекта класса создается своя копия членов, предоставляющих данные. Однако, наиболее удачная реализация некоторых типов требует, чтобы все объекты этого типа имели некоторые общие данные. Лучше, если эти данные можно описать как часть класса.

Такие данные описываются с помощью спецификатора static.

Описав член как статический, мы получим гарантию, что он будет создан в единственном числе, т.е. не будет создаваться для каждого объекта класса. Но он находится в области видимости этого класса и может быть доступен вне этой области, если только описан в общей части.

По умолчанию каждая нестатическая функция-член класса имеет доступ к указателю с именем this, который указывает на объект, для которого эта функция вызвана. Здесь this является ключевым словом языка программирования C++. Можно сказать что указатель this является неявным параметром каждой функции-члена класса. Указатель this имеет следующий тип:

Имя_класса * const

В принципе к любому члену класса, принадлежащему текущему объекту, можно обратиться через указатель this. Например, в функции-члене класса IntBox можно написать так: this->empty = false;

Но т.к. функции-члены класса имеют доступ ко всем членам класса по умолчанию, то указатель this используется в основном для возврата указателя или ссылки на объект, к которому применяется функция-член класса.

Функция-член класса может иметь квалификатор const.

Для константного объекта класса могут быть вызваны только те функции-члены класса, которые объявлены квалификатором const. Для не константного объекта класса могут быть вызваны функции как с квалификатором const, так и без него. Поэтому функции-члены класса, которые не изменяют значения его атрибутов, нужно объявлять с квалификатором const.

Запрещено объявлять константную функцию-член класса, которая модифицирует члены класса прямо или косвенно через не константные функции-члены класса. Константную функцию-член класса можно перегружать не константной функцией с тем же списком параметров.

24. Основные правила построения производных классов и работы с ними (С++).

Взаимосвязь между производным и базовым классами называют наследованием. Базовые классы иногда называют суперклассами, п производные – подклассами.

Доступ к компонентам базового класса из производного может быть ограничен с помощью специальных атрибутов(private, public, protected).

Множество взаимосвязанных классов называется иерархией классов, которая может быть изображена в виде ориентированного графа, состоящего из вершин и стрелок, указывающих на связи между вершинами.

Основные правила использования базовых и производных классов:

1) язык C++ позволяет строить иерархические структуры, в которых один класс наследуется от другого( при этом наследуемый класс(ребенок) называется производным, а класс, из которого выполняется наследование, называется базовым);

2) если функция F принадлежит базовому классу Б, то в производном классе П можно:

1. полностью заменить функцию F , т.е. объявить ее с тем же именем, но выполняющую другие действия(в результате появляются две разные версии одной и той же функции – старая Б::F и новая П::F, это позволяет построить производный класс на основе базового);

2. доопределить(частично изменить) функцию F, т.е. объявить ее с тем же именем, но в теле ее вызвать функцию F базового класса(в этом случае П::F делает то же что и Б::F, но выполняет и некоторые дополнительные операции);

3. использовать функцию Б::F без изменения;

3) если объявить указатель pБ на базовый класс, то ему можно присвоить значение указателя на объект производного класса, однако обратное утверждение неверно;

4) указателю pБ на производный класс нельзя присвоить значение указателя на объект базового класса;

5) по функциональным возможностям производные классы являются более мощными, чем их базовые классы;

6) регулирование доступа к компонентам базового и производного классов осуществляется с помощью атрибутов private, public, protected;

7) производный класс может быть, в свою очередь, базовым.

25. Параметризированные классы (С++).

Шаблон – это класс с параметрами или параметризированный класс.

Синтаксис описания шаблона:

template определение_класса;

Шаблон классов определяет правила построения множества классов.

Функции, которые описываются в шаблонах класса автоматически становятся шаблонными функциями.

Взаимосвязь между шаблонами и классами(рисунок потом нарисую).

Возможности, которые реализует шаблон типа, иногда называется параметрическими типами или генерическими объектами. Использование шаблона типа не влечет за собой каких-либо дополнительных расходов времени по сравнению с использованием класса, в котором все типы указаны непосредственно.

Параметризированные классы являются реализацией полиморфизма. Он позволяет использовать одни и те же функции для решения разных задач и имеет следующие методы программирования:

- общий полиморфизм(перегрузка операций, преобразование типов, перегрузка функций);

- частный полиморфизм(виртуальные функции, абстрактные классы);

- параметрический полиморфизм(шаблоны функций и классов).

26. Особенности программирования под Windows (определения, особенности, реализация).

В любом Windows приложении главная функция – это функция winmain или нечто похожее.

Кроме существующих сообщений можно создавать пользовательские. Мастера позволяют создавать каркас приложения. Интерфейс должен быть графическим. Контекст устройства – соответствующая телу устройства структура. Контекст сопоставляется с объектом и выводится сообщение.

Определенные инициализирующие константы лежат в файле ресурсов: растровые изображения, битовые карты, значки, определения меню, описание структуры диалоговых окон, строк и т.п.

В консольных приложениях объектные модули программы связываются жестко и статически на этапе компоновки.

В Windows программах модули связаны динамически, поэтому могут одновременно использоваться сразу несколькими программами.

При создании консольного приложения используются библиотеки процедур и функций, в то время как в windows приложениях уже библиотеки классов.

Библиотеки содержат классы, функции которых вызывают системные функции ОС Windows

(тут надо нарисовать картинку, сделаю это потом)

27. Процесс построения программ в среде Microsoft Visual Studio (определения, библиотеки).

28. Windows-приложение на Visual С++ (объект приложения, объект главного окна).

Программа, созданная Visual С++ App Wizard, состоит из четырех основных частей: объекта приложения, объекта главного окна, объекта документа и объекта вида.

Объект приложения.

Объект приложения, находящийся в файлах .h и .cpp (файл .h содержит определения констант, а также объявления переменных и методов класса) – то, что Windows запускает при старте программы. Когда этот объект начинает работу, он размещает на экране главное окно организует передачу сообщений Windows в главное окно и из него.

Сообщения Windows – это особые сигналы с минимальным объемом служебных данных, посредством которых различные объекты в Windows общаются между собой.

Например, WM_QUIT, WM_SIZE.

Объект главного окна.

Объект главного окна отображает на экране саму программу(точнее ее дружественный интерфейс); в нем находится меню, заголовок окна и панель инструментов. Объект главного окна отвечает за все, что происходит вокруг того места, где собственно, работает программа(где она рисует, выводит текст и т.д.). Рабочая зона программы называется клиентской областью окна; например, текст выводится в клиентской области текстового редактора. За работу с клиентской областью отвечает объект вида.

(тут ещё картинка)

Мастер AppWizard для создания приложения содержит файлы:

1) ClassWizard(.clw) – содержит краткое описание всех файлов, составляющих приложение и информацию, которая используется для модификации существующих или добавления новых адресов. Этот файл предназначен для хранения информации, необходимой для создания и модификации схем сообщений и схем данных в окнах диалогов, а также для создания прототипов функций.

2) .dsw – основной файл рабочей области. Содержит общие сведения о проекте и используется при построении отдельного проекта или подпроекта.

3) .h – заголовочный файл приложения, который включает другие заголовочные файлы проекта и объявляет класс приложения.

4) .cpp – текстовый файл, содержит исходный текст приложения, где описываются и класс соответствующего приложения, который был объявлен в предыдущем файле.

5) stdAfx.h – заголовочный файл стандартного каркаса приложения.

6) stdAfx.cpp – исходный текст стандартного каркаса приложения

7) MainFrm.h – заголовочный файл главного окна.

8) MainFrm.cpp – исходный текст главного окна.

9) Doc.h – заголовочный файл документа.

10) Doc.cpp – исходный текст документа.

11) View.h – заголовочный файл вида.

12) View.cpp – исходный текст вида.

13) Resource.h – файл с ресурсными константами.

14) .rc – файл с ресурсами. Содержит перечисление всех ресурсов Windows, которые используются в програме.

15) .ncb – содержит информацию о представлении и взаимных связях.

16) .dsp – файл проекта.

17) Каталог ресурсов(res) – файл, который представляет собой каталог ресурсов.

29. Windows-приложение на Visual С++ (объект документа, объект вида).

Программа, созданная Visual C++ AppWizard, состоит из четырех основных частей: объекта приложения, объекта главного окна, объекта вида и объекта документа.

Объект вида предназначен для работы с клиентской областью – местом, где обычно отображаются в соответствующем формате данные программы(текст там, или еще хрень какая). На самом деле объект вида представляет собой окно, которое накладывается поверх клиентской области. Объект вида отображает данные, хранящиеся в объекте документа.

В объекте документа хранятся данные программы. Возможно, у вас возникнет вопрос: - а почему бы не хранить данные в объекте вида? А нефиг! Дело в том, что таких данных может быть дох... много, причем не все они отображаются в клиентской области. Visual C++ облегчает нашу задачу и позволяет сохранить все данные в объекте документа, а затем поручить объекту вида отобразить лишь те данные, которые попадают в клиентскую область объекта вида. Для одного документа можно иметь несколько одновременно открытых видов.

30. Браузер, характеристики популярных броузеров, создание броузера на Visual C++ (определения, особенности программирования для Internet).

Реализовано для всех браузеров:

- клиентские программы для работы с Internet

- визуализация страниц

- использование клавиатуры, правой кнопки мыши

- закладки

- поиск и сортировка сообщений

- Java – машина для исполнения программ на языке Java

- поддержка языка сценариев для выполнения на машине клиента.

Наиболее популярные браузеры и их характеристики Internet Explorer Opera Mozilla FireFox

Создание браузера:

Написать свой собственный браузер на Visual C++ на удивление просто. Дело в том, что Microsoft Internet Explorer, который применяется в качестве базового приложения для работы со справочной системой Visual C++, может использоваться в качестве управляющего элемента в ваших программах.

Чтобы вывести html-страницу в web-браузере, достаточно включить в программу элемент Microsoft Web Browser, создать для него соответствующий объект и вызывать метод navigate().

Управляющий элемент Web Browser позволяет легко и быстро создавать браузеры(если не компьютере установлен Internet Explorer).

Visual C++ предоставляет и другие возможности для работы в Интернете. Наряду с Web Browser используется поддержка WinInet, появившаяся в Visual C++ 5.0.

Протокол HTTP может быть использован для того, чтобы загрузить HTML-код web-страницы.

Для этого необходимо при помощи App Wizard создать программу на базе диалогового окна, разместитьна нем текстовое поле и кнопку с надписью «Получить web-страницу»(или нечто более информативное или привычное для пользователя). Далее надо создать событийную функцию OnButton1() – обрабатывающую событие нажатия кнопки «Получить web-страницу»(или как там вы ее назвали). В этом методе создадим объект – новый сеанс Интернета(класс CInternetSession). Важно не забыть добавить строку #include . Хотя даже если забудешь, все равно потом придется вспомнить.

В результате начинается новый сеанс Интернета. Если же попытка подключения окажется неудачной, программу надо завершить.

Класс CInternetSession поддерживает протоколы HTTP, FTP.

Метод OpenURL() класса CInternetSession открывает web-страницу для передачи данных через HTTP. Он возвращает указатель на объект класса CStdioFile. Этот класс является производным от CFile и представляет не физический файл на диске, а поток C++.

31. Концепция технологии ActiveX, создание элементов ActiveX на Visual C++ (определения, направления в программировании).

Технология ActiveX – это совокупности методов, осуществляющих обмен данными между приложениями и позволяющих приложению объединять данные документов других приложений.

Основными методами(функциями) являются:

- связывание объекта;

- внедрение объекта;

- автоматизация;

Связывание – это соединение одного документа с другими, т.е. создание документа из других частей приложения. Применяется, если необходимо использовать связываемый объект во многих документах. Объем по памяти не изменяется.

Внедрение – внедрение одного документа в другой и создание таким образом составных документов. Доступ к элементам составного документа осуществляется в том приложении, в котором он был создан. Применяется, если необходимо для дальнейшего использования иметь единый составной документ. При этом приложение приемника данных, поддерживающих внедрение или связывание объектов, называется контейнером ActiveX.

Приложение источников данных, обеспечивающее редактирование объектов связанных или внедренных в документ другого приложения называется сервером ActiveX.

Под объектом понимается блок данных, передаваемый из сервера в контейнер. Автоматизация представляет собой интерфейс общего применения. Этот интерфейс работает с объектами, методами и свойствами.

Преимущества технологии ActiveX:

1) быстрое написание программного кода;

2) открытость и мобильность;

3) возможность написания приложений с использованием распространенных средств разработки;

4) существует большое количество бесплатных программных элементов ActiveX.

5) Основана на широко используемых стандартах: протоколы HTML, CPP; введенные стандарты Microsoft.

Элемент управления ActiveX – программный модуль, подключенный к программе, как любой другой элемент Windows(прокрутки, раскрываемые списки и др.) можно рассматривать как дочернее окно, вэтом случае окно, содержащее элементы ActiveX является контейнером.

Отличительная особенность элементов ActiveX это наличие собственных свойств и методов. Все функции C++, вызванные для работы с этими элементами используют существующие методы и свойства, но можно написать и свои

Создание элемента управления включает в себя:

1) определение внешнего вида(рисование элемента);

2) создание обработчика сообщений в элементе;

3) связывание обработчика с методом;

4) дополнение кода программы;

5) тестирование элемента.

Мастер ActiveX Control Wizard

Исходные тексты программы содержатся в файлах: ctl.h .ctl.cpp. Команда Tools|ActiveXControlTestContainer.

Мастер конструирует шаблон программы, в которую можно внести дополнения, связанные с рисованием элемента ActiveX, созданием обработчика сообщений в элементе, тестированием и использованием в программе не Visual C++.

Элементы могут рисоваться в двух контекстах:

1) первый, когда элемент управления активен и рисуется вн<


Последнее изменение этой страницы: 2018-09-09;


dommodels.ru 2018 год. Все права принадлежат их авторам! Главная