С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

ООП. Тестовое задание собеседования. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ книга по патернам http://www.cyberforum.ru/cpp-beginners/thread949370.html
сказали прочитать книгу по патернам "Gang of Four" можно ли её заменить на эту http://rutracker.org/forum/viewtopic.php?t=3694471 или не стоит? просто вторую в продаже проще найти да и порог...
C++ Функция в обьекте-можно ли создать?Нужно ли?Что я вобще делаю?И как правильно? Простите еще и за русские буквы... Cat::объект; объект void Метод (int целая=100;) //обычный метод {целая=целая+initialAge; cout << целая;cout << " целая\n";} http://www.cyberforum.ru/cpp-beginners/thread949354.html
Questions about C++ C++
1.Существует ли в C++ форматировка кода,как в PascalABC.NET к примеру? 2.Справа от зеленой стрелочки (Локальный откладчик Windows) есть возможность выбора Debug и Release.В чем отличие?И что Это?...
Проецирование файла данных C++
ПОМОГИТЕ ПОЖАЛУЙСТА Проецировать файл данных. В спроецированом файле поменять местами первую и вторую половину файла.
C++ Непонятно, как работает push_back http://www.cyberforum.ru/cpp-beginners/thread949345.html
Задали на неделю сделать программы, где нужно использовать std::vector. Сами алгоритмы для них я продумала (для второй программы он точно должен работать), но у меня возникли проблемы с командой...
C++ Вывод данных между определенных символов в строке Имеется строка с данными: "*имя*файл*размер*...*..." Как считать и вывести сначала "имя" потом "файл", "размер" и так далее... Данные получаю из файла через fgets. Я думаю что надо искать позицию... подробнее

Показать сообщение отдельно
XRuZzz
Антикодер
692 / 598 / 29
Регистрация: 15.09.2012
Сообщений: 2,545
16.10.2013, 16:24
можно ещё привести такой пример.
нам практически всегда в больших приложениях нужно работать с СУБД. Например нужно одновременно поддерживать работу с MySQL и SQLite
на древнем стиле программирования это выглядело так
C++
1
2
3
4
5
6
7
8
9
switch (db)
{
    case MYSQL:
       connectMySQL();
       break;
    case SQLITE:
       connectSQLite();
       break;
}
теперь создаём код с стиле ООП и полиморфный класс DataBases
C++
1
2
3
4
class DataBases
{
    virtual bool connect();
}
C++
1
2
3
4
5
6
7
class MySQL: public DataBases
{
    virtual bool connect()
    {
       // реализация
    }
}
C++
1
2
3
4
5
6
7
class SQLite: public DataBases
{
    virtual bool connect()
    {
       // реализация
    }
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
int connectToAnyDB(DataBases *pDB)
{
   pDB->connect();
}
int main()
{
  // использование
   MySQL mySqlDB;
   connectToAnyDB(&mySqlDB);
   SQLite sqLiteDB;
   connectToAnyDB(&sqLiteDB);
}
а теперь вдруг требования поменялись и нужно добавить поддержку СУБД Oracle
во втором случае нам не нужно портить работающий код, достаточно добавить реализацию класса
C++
1
2
3
4
5
6
7
class Oracle: public DataBases
{
    virtual bool connect()
    {
       // реализация
    }
}
нужно добавить, что на этой особенности могут быть реализованы более мощные механизмы, например оповещение о событиях множества объектов классов-реализаций полиморфного класса.

Эти объекты можно подписывать(отписывать) на оповещение при этом логика механизма остаётся простой.

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

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

В данном смысле полиморфный класс "летательный аппарат" означает "принимающий формы разных летательных аппаратов"

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

Проблема только в том, что когда большой проект начинается вы не можете знать "истинную архитектуру" приложения. И классы начинают кочевать по проекту, меняя свои имена и сущности
4
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.