Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.79
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
06.09.2013, 17:47     ООП. Тестовое задание собеседования. #1
Это тестовое задание для устройста на работу. Я не совсем понимаю что от меня хотят. Не могли бы вы мне далее составить набросок плана дествий.
Зарание спасибо.

Само задание
С использованием языка C++ построить и на основе готовой модели предложить решение задачи
Автомобили.
1. Управление автомобилем.
2. Поездка на автомобиле.
3. Повреждение автомобиля.
4. Выбор автомобиля для покупки.
5. Диагностика неисправленности и ремонт автомобиля.

Требования к работе:
1. Выделение уровней абстракции в системе.
2. Выделение базовых сущностей предметной области.
3. Построение иерархии сущностей.
4. Отношения между сущностями.
5. Демонстрация инкапсуляции, наследования и полиморфизма в решениях задач.
6. Словесное обоснование решений, принятых при построении иерархии:
a. Уровень абстракции, на которым зада решена.
b. Какие сущности из иерархии использованы и с какой целью.
c. Плюсы и минусы выбранного решения.
d. Обоснование дополнительных архитектурных решений, если таковые были использованы для конкретной задачи.

Результат должен быть оформлен в виде одного или нескольких файлов с кодом на C# или C++. Все комментарии и пояснения должны быть написаны непосредственно внутри данных файлов как комментарии к частям кода или общий комментарий в начале файлов. Код не обязан быть компилируемым и запускаемым.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
06.09.2013, 17:47     ООП. Тестовое задание собеседования.
Посмотрите здесь:

C++ ООП, разобрать задание.
Небольшое тестовое задание в финской компании. C++
C++ задание по ООП, классы, матрицы
C++ Расстолковать задание по ООП С++
Тестовое задание на Junior C++ dev C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
06.09.2013, 18:31     ООП. Тестовое задание собеседования. #2
Цитата Сообщение от maxon887 Посмотреть сообщение
1. Управление автомобилем.
2. Поездка на автомобиле.
3. Повреждение автомобиля.
4. Выбор автомобиля для покупки.
5. Диагностика неисправленности и ремонт автомобиля.
тут, возможно, реализовать методы в классе автомобиль. с 4 видимо придется делать отдельную от класса функцию

Цитата Сообщение от maxon887 Посмотреть сообщение
Требования к работе:
1. Выделение уровней абстракции в системе.
2. Выделение базовых сущностей предметной области.
3. Построение иерархии сущностей.
4. Отношения между сущностями.
5. Демонстрация инкапсуляции, наследования и полиморфизма в решениях задач.
6. Словесное обоснование решений, принятых при построении иерархии:
a. Уровень абстракции, на которым зада решена.
b. Какие сущности из иерархии использованы и с какой целью.
c. Плюсы и минусы выбранного решения.
d. Обоснование дополнительных архитектурных решений, если таковые были использованы для конкретной задачи.
тут соответственно требования к оформлению, и структурированию данных в объявлении класса/ов
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
06.09.2013, 20:35  [ТС]     ООП. Тестовое задание собеседования. #3
3. Построение иерархии сущностей.

Тоесть, я так понимаю уже одним классом автомобиль не обойдёшься, нужно какое нить наследование сдлеать.
Я вот ещё думаю делать ли мне Виртуальные функции и Абстрактные классы?
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
06.09.2013, 21:50     ООП. Тестовое задание собеседования. #4
Цитата Сообщение от maxon887 Посмотреть сообщение
2. Выделение базовых сущностей предметной области.
я увидел тока одну базовую сущность - автомобиль

Добавлено через 1 час 3 минуты
кстати у Дейтела в 8-ом издании есть раздел
1.6 Introduction to Object Technology
там такой пункт есть
....
The Automobile as an Object
To help you understand objects and their contents, let’s begin with a simple analogy. Suppose
you want to drive a car and make it go faster by pressing its accelerator pedal.
....
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
08.09.2013, 15:50  [ТС]     ООП. Тестовое задание собеседования. #5
А ещё у меня такой вопрос, как мне продемонстрировать полиморфизм???
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
09.09.2013, 00:06     ООП. Тестовое задание собеседования. #6
я думаю при устройстве на работу нужно продемонстрировать не только полиморфизм, но ещё и умение комбинировать 4 стиля программирования, о которых идёт речь в книге Страуструпа.
Объектно-ориентированная программа для расчета арифметического выражения

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

Скажем есть класс "летательные аппараты" - пусть будет абстрактным, у него есть виртуальный метод "подняться в воздух". Теперь создаём потомков - классы "вертолёты Ka-50" и "самолёты Су-27". у каждого класса-потомка есть собственная реализация метода "подняться в воздух", вертолёту надо начать вращение лопастями, и он поднимется. самолёту надо выехать на взлетную полосу, запустить двигатели, разогнаться до определенной скорости, перевести закрылки в нужное положение, и после взлёта убрать шасси.

Теперь создаём экземпляры 3 вертолёта Ка-50 и 4 самолёта Су-27. Поступает команда поднять в воздух всю авиацию. и мы используя только указатель типа "летательные аппараты" на объекты производных классов поднимаем всех воздух.

Не по теме:

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

maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
16.10.2013, 13:46  [ТС]     ООП. Тестовое задание собеседования. #7
XRuZzz, так что, вся мощь полиморфизма, целый принцып ООП. Заключается в том что мы можем закинуть все вертолётики и самалётики в один контейнер, типа "летающий аппарат" а потом их всех разом поднять в воздух??? Что то я не чувствую силы данного принцыпа.
Вот наследование например понятно всё, мы можем целые тонный кода наследованных друг за другом просто вызывать одной строкой. Инкапсуляция тоже круто, мы скрываем в этих кодах то что нам не нужно. А тут, полиморфизм, не могу понять(((((

Добавлено через 3 минуты
в Qt например собитей отрисовки на виджете реализовано виртуальной функцией. Но зачем??? непонятно((((
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
16.10.2013, 13:57     ООП. Тестовое задание собеседования. #8
Цитата Сообщение от maxon887 Посмотреть сообщение
А тут, полиморфизм, не могу понять(((((
Есть базовый класс с неким интерфейсом.
Есть много разных наследников, реализующий этот интерфейс.
При полиморфном поведении, Вы не задумываетесь с каким конкретно типом наследника приходится работать, т.к. всё взаимодействие осуществляется через интерфейс (базовый класс).
При таком раскладе достаточно просто добавлять новые конкретные классы, не меняя при этом правило обработки этих классов. Т.к. интерфейс не изменяется. В общем, на любой вики можно об этом почитать.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
16.10.2013, 16:24     ООП. Тестовое задание собеседования. #9
Сообщение было отмечено автором темы, экспертом или модератором как ответ
можно ещё привести такой пример.
нам практически всегда в больших приложениях нужно работать с СУБД. Например нужно одновременно поддерживать работу с 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()
    {
       // реализация
    }
}
нужно добавить, что на этой особенности могут быть реализованы более мощные механизмы, например оповещение о событиях множества объектов классов-реализаций полиморфного класса.

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

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

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

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

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

Проблема только в том, что когда большой проект начинается вы не можете знать "истинную архитектуру" приложения. И классы начинают кочевать по проекту, меняя свои имена и сущности
Alexxx7
97 / 33 / 5
Регистрация: 24.04.2012
Сообщений: 151
16.10.2013, 16:33     ООП. Тестовое задание собеседования. #10
сообщите пожалуйста о успехах и решениях
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
16.10.2013, 16:36  [ТС]     ООП. Тестовое задание собеседования. #11
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Из баша)))
ххх:объясни мне пожалуйста доступным языком полиморфизм
ууу:короч смотри
ууу:у тебя есть класс коржик, от которого наследуются классы пирожено и морожено
ууу:у коржика есть метод схавать
ууу:но в пирожене он имплементируется как пожевать с чаем, а в морожене - полызькать
ууу:и вот у тебя пакет для коржиков. И ты туда наложила в перемешку пироженые и мороженые и тебе пофиг что ты от туда достанеш, ты вызываеш метод схавать. а уже реализация вызовется автоматом в зависимости от того что достанешь
ууу:вот это полиморфизм
XRuZzz
16.10.2013, 16:42
  #12

Не по теме:

получается мороженые и пироженые будут хавать сами себя

maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
17.10.2013, 14:50  [ТС]     ООП. Тестовое задание собеседования. #13
Цитата Сообщение от Alexxx7 Посмотреть сообщение
сообщите пожалуйста о успехах и решениях
решение я вылажывать не буду, потому что это собеседование я завалил)))
а в общем плане успехи довольно неплохие 1 из 3 удачное собеседование, учитывая ещё что я студент 5го курса.
Alexxx7
97 / 33 / 5
Регистрация: 24.04.2012
Сообщений: 151
17.10.2013, 14:54     ООП. Тестовое задание собеседования. #14
если можно подробней о собеседовании, заданиях, вопросах, требованиях. просто тема актуальная, и ни малейшего представления нет, хотелось бы поосновательней поготовится. заранее спасибо.
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
17.10.2013, 14:56  [ТС]     ООП. Тестовое задание собеседования. #15
XRuZzz, большое спасибо за пример с базами и штормом, очень помоголо. Не могли бы вы мне ещё поставить задачу какую небудь простенькую, что б я прокачался в этом + задействовал флаги, типо шторма в ващем примерею. ну или хотяб кусочак кода накинуть.
XRuZzz
Антикодер
577 / 478 / 23
Регистрация: 15.09.2012
Сообщений: 2,429
17.10.2013, 15:41     ООП. Тестовое задание собеседования. #16
Цитата Сообщение от maxon887 Посмотреть сообщение
XRuZzz, большое спасибо за пример с базами и штормом, очень помоголо. Не могли бы вы мне ещё поставить задачу какую небудь простенькую, что б я прокачался в этом + задействовал флаги, типо шторма в ващем примерею. ну или хотяб кусочак кода накинуть.
надо было в статью оформить, просто изначально не думал много писать.

мне лично помог разобраться пример MVC в примере на С++ (консольное приложение)

Для тренировке можно реализовать сам паттерн MVC(который включает в себя паттерн Наблюдатель).

Либо написать код к моему рассказу про летательные аппараты. Это может быть консольное(текстовое) приложение, но мне лично было бы интересно делать это в графике.
Либо не терять время на мои задачки, и читать Страуструпа(можно конечно кого нить другого почитать, но Страуструпа игнорировать опасно
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
17.10.2013, 15:42  [ТС]     ООП. Тестовое задание собеседования. #17
Alexxx7, Ну я начну с того что я из Беларуси. ИТ сфера у нас более мение развита, в конце концов танки мы сделали(кстати они ща тоже набират программистов(WarGamming), ещё крупные филлиалы Epam, BelHard. Кучи частников. Ну короче есть куда ринуться.
План действий у меня таков:
Создаешь резюме на таких сайтах как rabota.by, jobs.org, ВавяПупкинНайдиРаботу.com и так далее.. Чем больше твоих резюме вист в нете тем лучше. И кстати лучше чуть при уменьшить свои способности, чем преувеличить, ибо они всё равно тебя тогда отсеют на собеседовании.
Ещё я создал копию такого же резюме в вордовском формате. Ибо часто просят прислать на почту.
Далее два варианта
Первый сидеть и ждать)))) ну ещё на до поддерживать актуальность своих резюме(апать так сказать, кто занимался барыжничеством в инете тот поймёт). Ну и все. Тебе время от времени будут звонить рекрутеры(в зависимотсти от крутости твоего резюме, чем круче тем чаше) приглашать на собеседование, рассказывать о компании. Иногда сразу понятно вы друг другу не подходите. Но я, например всё ровно хожу на них))) посмотреть, как да что устроено, как кто работает.
Второй это можно ещё искать вакансии на этих же сайтах и нажимать кнопу типо "Хочу у вас работать", тогда будет больше приглашений(но кстати не намного).
На счет тестовых заданий тут угадать очень сложно, кто-то даёт такую полную абстракцию, что указана выше, кто просит написать функций реверса строки или оптимизировать участок кода. Единственное, что можно точно сказать, так это то что всем надо что б у тебя были сильные знания самого языка. Например если компания ищет разработчика игр С++, и в вакансии компании указано работать с DirectX то тебя по нему сто пудова спрашивать сильно не будут, им главное что бы ты был с мозгами и знал язык( а лучше несколько). А на DirectX они уже сами тебя поднатоскают.Ну вот вроде бы и всё.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2013, 16:14     ООП. Тестовое задание собеседования.
Еще ссылки по теме:

C++ Не могу понять задание по "ООП"
Задание с собеседования (циклы) C++
C++ Тестовое задание для трудоустройства

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
XRuZzz
17.10.2013, 16:14     ООП. Тестовое задание собеседования.
  #18

Не по теме:

Цитата Сообщение от XRuZzz Посмотреть сообщение
C++
1
2
3
4
class MySQL: public DataBases
{
   virtual bool connect() { // реализация }
}
вот мне интересно можно ли(рационально ли) с такой же легкостью сделать поддержку Redis
C++
1
2
3
4
class Redis: public DataBases
{
   virtual bool connect() { // реализация }
}
можно ли обобщать интерфейсы для реляционных и не реляционных СУБД? Буду благодарен если кто подскажет. Хотя если немного поразбираться ответ будет очевидным

Yandex
Объявления
17.10.2013, 16:14     ООП. Тестовое задание собеседования.
Ответ Создать тему
Опции темы

Текущее время: 23:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru