- Любовные романы
- Фантастика и фэнтези
- Ненаучная фантастика
- Ироническое фэнтези
- Научная Фантастика
- Фэнтези
- Ужасы и Мистика
- Боевая фантастика
- Альтернативная история
- Космическая фантастика
- Попаданцы
- Юмористическая фантастика
- Героическая фантастика
- Детективная фантастика
- Социально-психологическая
- Боевое фэнтези
- Русское фэнтези
- Киберпанк
- Романтическая фантастика
- Городская фантастика
- Технофэнтези
- Мистика
- Разная фантастика
- Иностранное фэнтези
- Историческое фэнтези
- LitRPG
- Эпическая фантастика
- Зарубежная фантастика
- Городское фентези
- Космоопера
- Разное фэнтези
- Книги магов
- Любовное фэнтези
- Постапокалипсис
- Бизнес
- Историческая фантастика
- Социально-философская фантастика
- Сказочная фантастика
- Стимпанк
- Романтическое фэнтези
- Ироническая фантастика
- Детективы и Триллеры
- Проза
- Юмор
- Феерия
- Новелла
- Русская классическая проза
- Современная проза
- Повести
- Контркультура
- Русская современная проза
- Историческая проза
- Проза
- Классическая проза
- Советская классическая проза
- О войне
- Зарубежная современная проза
- Рассказы
- Зарубежная классика
- Очерки
- Антисоветская литература
- Магический реализм
- Разное
- Сентиментальная проза
- Афоризмы
- Эссе
- Эпистолярная проза
- Семейный роман/Семейная сага
- Поэзия, Драматургия
- Приключения
- Детская литература
- Загадки
- Книга-игра
- Детская проза
- Детские приключения
- Сказка
- Прочая детская литература
- Детская фантастика
- Детские стихи
- Детская образовательная литература
- Детские остросюжетные
- Учебная литература
- Зарубежные детские книги
- Детский фольклор
- Буквари
- Книги для подростков
- Школьные учебники
- Внеклассное чтение
- Книги для дошкольников
- Детская познавательная и развивающая литература
- Детские детективы
- Домоводство, Дом и семья
- Юмор
- Документальные книги
- Бизнес
- Работа с клиентами
- Тайм-менеджмент
- Кадровый менеджмент
- Экономика
- Менеджмент и кадры
- Управление, подбор персонала
- О бизнесе популярно
- Интернет-бизнес
- Личные финансы
- Делопроизводство, офис
- Маркетинг, PR, реклама
- Поиск работы
- Бизнес
- Банковское дело
- Малый бизнес
- Ценные бумаги и инвестиции
- Краткое содержание
- Бухучет и аудит
- Ораторское искусство / риторика
- Корпоративная культура, бизнес
- Финансы
- Государственное и муниципальное управление
- Менеджмент
- Зарубежная деловая литература
- Продажи
- Переговоры
- Личная эффективность
- Торговля
- Научные и научно-популярные книги
- Биофизика
- География
- Экология
- Биохимия
- Рефераты
- Культурология
- Техническая литература
- История
- Психология
- Медицина
- Прочая научная литература
- Юриспруденция
- Биология
- Политика
- Литературоведение
- Религиоведение
- Научпоп
- Психология, личное
- Математика
- Психотерапия
- Социология
- Воспитание детей, педагогика
- Языкознание
- Беременность, ожидание детей
- Транспорт, военная техника
- Детская психология
- Науки: разное
- Педагогика
- Зарубежная психология
- Иностранные языки
- Филология
- Радиотехника
- Деловая литература
- Физика
- Альтернативная медицина
- Химия
- Государство и право
- Обществознание
- Образовательная литература
- Учебники
- Зоология
- Архитектура
- Науки о космосе
- Ботаника
- Астрология
- Ветеринария
- История Европы
- География
- Зарубежная публицистика
- О животных
- Шпаргалки
- Разная литература
- Зарубежная литература о культуре и искусстве
- Пословицы, поговорки
- Боевые искусства
- Прочее
- Периодические издания
- Фанфик
- Военное
- Цитаты из афоризмов
- Гиды, путеводители
- Литература 19 века
- Зарубежная образовательная литература
- Военная история
- Кино
- Современная литература
- Военная техника, оружие
- Культура и искусство
- Музыка, музыканты
- Газеты и журналы
- Современная зарубежная литература
- Визуальные искусства
- Отраслевые издания
- Шахматы
- Недвижимость
- Великолепные истории
- Музыка, танцы
- Авто и ПДД
- Изобразительное искусство, фотография
- Истории из жизни
- Готические новеллы
- Начинающие авторы
- Спецслужбы
- Подростковая литература
- Зарубежная прикладная литература
- Религия и духовность
- Старинная литература
- Справочная литература
- Компьютеры и Интернет
- Блог
Интернет-журнал 'Домашняя лаборатория', 2007 №6 - Вязовский
Шрифт:
Интервал:
Закладка:
virtual ~CBook(); //деструктор
virtual void Display(); // вывод описания книги
protected;
char m_szAuthor [MAX_LENGTH]; //имя автора
};
#endif
// CBook.cpp
#include <iostream.h>
#include "CBook.h"
// Конструктор
CBook::CPublication()
{
// Ввод имени автора
cout <<"Author: ";
cin >> m_szAuthor;
}
// Деструктор
CBook::~CBook()
{
}
// Вывод описания книги
void CBook::Display ()
{
cout << "BOOK: " << endl;
cout << "Author: " << m_szAuthor << endl;
cout << "Title: " << m_szTitle << endl;
cout << "Year: " << m_nYear<< endl;
}
Файлы CJournal.h и СJournal.cpp задают класс СJournal.
// СJournal.h
#ifndef _CJOURNAL_
#define _CJOURNAL_
#include "CPublication.h"
class СJournal: public CPublication // класс СJournal — производный от CPublication
{
public:
СJournal(); // конструктор
virtual ~СJournal(); //деструктор
virtual void Display(); // вывод описания книги
protected;
int m_Number; // номер журнала
};
#endif
// СJournal.cpp
#include <iostream.h>
#include "CJournal.h"
// Конструктор
CJournal::CJournal(): CPublication ()
{
// Ввод номера журнала
cout << "Number: ";
cin >> m_nNumber;
}
// Деструктор
CJournal::~CJournal ()
{
}
// Вывод описания журнала
void СJournal::Display()
{
cout << "Journal: " << endl;
cout << "Title: " << m_nTitle << endl;
cout << "Year: " << m_nYear << endl;
cout << "Number: " << m_nNumber << endl;
}
И, наконец, файл publications.cpp с бизнес-логикой
// Книги и журналы (объектно-ориентированное программирование)
#include <iostream.h>
#include "CBook.h"
#include "CJournal.h"
#define MAX_ID 100 // максимальное число изданий
void main()
{
int nMenu, flag = 1;
int nNewID =0; // индекс нового издания
CPublication* aCPublication[MAX_ID]; // массив изданий
while(nNewID < MAX_ID && flag)
{
// Вывод пунктов меню
cout << "Новое издание. Введите: "<< endl;
cout << " 1 для книги,n 2 для журналаn 3 — выход" << endl;
// Выбор пункта меню
cin >> nMenu;
switch (nMenu)
{ case 1: aCPublication[nNewID++] = new CBook(); break;
case 2: aCPublication[nNewID++] = new CJournal(); break;
default: flag = 0; break;
}
}
// Вывод описаний изданий
for (int id = 0; id < nNewID; id++)
{
aCPublication[id]->Display();
delete aCPublication[id];
}
}
В данном примере демонстрируется использование основных принципов объектно-ориентированного программирования
• Инкапсуляция
Инкапсуляция означает сокрытие от пользователя класса его внутренней кухни. Данные и функции (методы) хранятся вместе, доступ к данным (которые следует размещать в защищенной секции protected или private) доступен только с помощью методов класса. Это позволяет разработчику класса менять код класса не изменяя код использующих его приложений (если только не были изменены сигнатуры методов).
• Наследование реализации
Цель механизма наследования — повторное использование кода. Класс в, наследующий класс а, наследует его данные и методы.
• Полиморфизм
Так как и класс CBоок, и класс CJournal происходят от одного базового класса CPublication, а метод Display () в базовом классе является виртуальным, все производные от этого базового класса классы могут переопределить этот метод. Таким образом, мы имеем возможность вызывать метод Display () для любого объекта любого класса порожденного от CPublication и не беспокоиться при этом о выяснении типа объекта.
Таким образом, ООП преодолевает проблемы, возникающие при использовании процедурного подхода. Но имеются и проблемы не решаемые ООП:
• Повторное использование кода
Это одна из целей ООП. Возможны два подхода:
♦ Распространение библиотек классов в виде исходного кода (' белый ящик")
Этот способ часто используется, т. к. библиотека будет компилироваться на машине клиента и, следовательно, не будет проблем с несовместимостью различных компиляторов.
Но с этим способом связаны следующие проблемы:
— Многие программисты предпочитают писать свой код, а не изучать чужой.
— После изучения кода библиотеки часто возникает соблазн его модификации, адаптации под конкретное приложение. В результате принцип повторного использования кода нарушается, т. к. приложение не сможет использовать новые версии этой библиотеки.
— Код библиотеки включается в код всех использующих ее приложений,
♦ Упаковка класса в динамически компонуемую библиотеку (DLL)
При этом мы избавляемся от проблем, возникающих при распространении классов в виде исходного кода. Но, естественно, возникают новые проблемы:
— Отсутствие двоичного стандарта для C++
Различные компиляторы с C++ по разному решают вопросы реализации отдельных языковых особенностей языка C++ и некоторые вопросы компоновки. В связи с этим, в общем случае нельзя гарантировать, что DLL, подготовленная на одном компиляторе, будет работать с клиентом, подготовленным с помощью другого компилятора.
— Проблема версий DLL
C++ поддерживает синтаксическую инкапсуляцию, но не двоичную. Иными словами, от клиента скрыта реализация класса на уровне языка, что позволяет менять реализацию класса не меняя кода клиента. Но при этом перекомпиляция клиента в общем случае необходима. Это связано с тем, что именно клиент отводит память под все данные экземпляра класса. Это делается ради повышения эффективности. В результате, если при изменении реализации класса был изменен состав (иили порядок) данных класса, то клиент не будет работать с новей версией DLL без перекомпиляции. Установив новую версию DLL, мы погубим все приложения, которые были скомпилированы для работы со старой версией.
• Не решены вопросы разработки распределенных приложений
Собственно, такая задача и не ставилась при разработке ООП. Однако в современных условиях распределенность приложений становится необходимым требованием.
Компонентное программирование
В данном разделе будет дано только очень короткое введение в проблематику компонентного программирования. Подробнее — в последующих главах.
Компонентное программирование — попытка решить те проблемы, которые возникают при использовании ООП. Основная идея — распространение классов в бинарном виде (т. е. не в виде исходного кода) и предоставление доступа к методам класса через строго

