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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 28, средняя оценка - 4.79
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
#1

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

06.09.2013, 17:47. Просмотров 3748. Ответов 17
Метки нет (Все метки)

Это тестовое задание для устройста на работу. Я не совсем понимаю что от меня хотят. Не могли бы вы мне далее составить набросок плана дествий.
Зарание спасибо.

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

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

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

Задание с собеседования (циклы) - C++
День добрый! Был сегодня на собеседовании, и было такое задание где было такое задание: Описать одним предложением что делает данная...

Тестовое задание - C++
private class Connect (){ public Device dev1 = new Device(); public Device dev2 = new Device(); puclic void Connect (){ for...

Тестовое задание на Junior C++ dev - C++
Доброго времени суток. Неделю назад ради интереса отправил свое резюме в одну компанию, куда требуются с++ юниоры. Получил от них...

Тестовое задание для трудоустройства - C++
Решил попробовать устроиться в компанию и узнать что вообще и как. Отправил в компанию резюме, дали тестовое задание: Страуструп. Глава...

Небольшое тестовое задание в финской компании. - C++
Привествую всех жителей форума. Сразу отмечу, что решения просить не хочу, а просто хочу показать задание, которая давала компания...

Написать ответы на тестовое задание при приёме на работу (исключения, sizeof, mutex) - C++
Добрый день! Ходил недавно на собеседование. Имеется список вопросов, на некоторые ответил правильно на какие-то - нет. Хотелось бы...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,061
Завершенные тесты: 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. Обоснование дополнительных архитектурных решений, если таковые были использованы для конкретной задачи.
тут соответственно требования к оформлению, и структурированию данных в объявлении класса/ов
1
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
06.09.2013, 20:35  [ТС] #3
3. Построение иерархии сущностей.

Тоесть, я так понимаю уже одним классом автомобиль не обойдёшься, нужно какое нить наследование сдлеать.
Я вот ещё думаю делать ли мне Виртуальные функции и Абстрактные классы?
0
XRuZzz
Антикодер
676 / 577 / 28
Регистрация: 15.09.2012
Сообщений: 2,523
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.
....
0
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
08.09.2013, 15:50  [ТС] #5
А ещё у меня такой вопрос, как мне продемонстрировать полиморфизм???
0
XRuZzz
Антикодер
676 / 577 / 28
Регистрация: 15.09.2012
Сообщений: 2,523
09.09.2013, 00:06 #6
я думаю при устройстве на работу нужно продемонстрировать не только полиморфизм, но ещё и умение комбинировать 4 стиля программирования, о которых идёт речь в книге Страуструпа.
Объектно-ориентированная программа для расчета арифметического выражения

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

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

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

Не по теме:

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

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

Добавлено через 3 минуты
в Qt например собитей отрисовки на виджете реализовано виртуальной функцией. Но зачем??? непонятно((((
0
Tulosba
:)
Эксперт С++
4396 / 3239 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
16.10.2013, 13:57 #8
Цитата Сообщение от maxon887 Посмотреть сообщение
А тут, полиморфизм, не могу понять(((((
Есть базовый класс с неким интерфейсом.
Есть много разных наследников, реализующий этот интерфейс.
При полиморфном поведении, Вы не задумываетесь с каким конкретно типом наследника приходится работать, т.к. всё взаимодействие осуществляется через интерфейс (базовый класс).
При таком раскладе достаточно просто добавлять новые конкретные классы, не меняя при этом правило обработки этих классов. Т.к. интерфейс не изменяется. В общем, на любой вики можно об этом почитать.
1
XRuZzz
Антикодер
676 / 577 / 28
Регистрация: 15.09.2012
Сообщений: 2,523
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()
    {
       // реализация
    }
}
нужно добавить, что на этой особенности могут быть реализованы более мощные механизмы, например оповещение о событиях множества объектов классов-реализаций полиморфного класса.

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

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

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

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

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

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

Не по теме:

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

0
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
17.10.2013, 14:50  [ТС] #13
Цитата Сообщение от Alexxx7 Посмотреть сообщение
сообщите пожалуйста о успехах и решениях
решение я вылажывать не буду, потому что это собеседование я завалил)))
а в общем плане успехи довольно неплохие 1 из 3 удачное собеседование, учитывая ещё что я студент 5го курса.
0
Alexxx7
98 / 34 / 5
Регистрация: 24.04.2012
Сообщений: 151
17.10.2013, 14:54 #14
если можно подробней о собеседовании, заданиях, вопросах, требованиях. просто тема актуальная, и ни малейшего представления нет, хотелось бы поосновательней поготовится. заранее спасибо.
0
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
17.10.2013, 14:56  [ТС] #15
XRuZzz, большое спасибо за пример с базами и штормом, очень помоголо. Не могли бы вы мне ещё поставить задачу какую небудь простенькую, что б я прокачался в этом + задействовал флаги, типо шторма в ващем примерею. ну или хотяб кусочак кода накинуть.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.10.2013, 14:56
Привет! Вот еще темы с ответами:

Расстолковать задание по ООП С++ - C++
Написать саму прогу для меня не проблема,но вот только не совсем пойму задание,непонятна конкретно эта часть :пассажиры перемещаются в...

ООП, разобрать задание. - C++
Составить описание класса для представления комплексных чисел с возможностью задания вещественной и мнимой частей как числами типов double,...

задание по ООП, классы, матрицы - C++
Составить описание класса, обеспечивающего представление матрицы произвольного размера с возможностью изменением кол-ва строк и столбцов,...

Тестовое задание от работадателя. Хотелось бы услышать критику. - C++
Пробую устроиться программистом. Вот одна из компаний выслала мне тестовое задание следующего содержания: Немного поломав голову,...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
17.10.2013, 14:56
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru