12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
1

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

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

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

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

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

Результат должен быть оформлен в виде одного или нескольких файлов с кодом на C# или C++. Все комментарии и пояснения должны быть написаны непосредственно внутри данных файлов как комментарии к частям кода или общий комментарий в начале файлов. Код не обязан быть компилируемым и запускаемым.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.09.2013, 17:47
Ответы с готовыми решениями:

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

Тестовое задание
Помогите пройти тест. Очень надо :) Введите пропущенный оператор в функцию вставки нового...

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

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

17
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
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
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
06.09.2013, 20:35  [ТС] 3
3. Построение иерархии сущностей.

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

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

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

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

Не по теме:

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

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

Добавлено через 3 минуты
в Qt например собитей отрисовки на виджете реализовано виртуальной функцией. Но зачем??? непонятно((((
0
:)
Эксперт С++
4773 / 3267 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
16.10.2013, 13:57 8
Цитата Сообщение от maxon887 Посмотреть сообщение
А тут, полиморфизм, не могу понять(((((
Есть базовый класс с неким интерфейсом.
Есть много разных наследников, реализующий этот интерфейс.
При полиморфном поведении, Вы не задумываетесь с каким конкретно типом наследника приходится работать, т.к. всё взаимодействие осуществляется через интерфейс (базовый класс).
При таком раскладе достаточно просто добавлять новые конкретные классы, не меняя при этом правило обработки этих классов. Т.к. интерфейс не изменяется. В общем, на любой вики можно об этом почитать.
1
Антикодер
1796 / 861 / 48
Регистрация: 15.09.2012
Сообщений: 3,071
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
98 / 34 / 10
Регистрация: 24.04.2012
Сообщений: 151
16.10.2013, 16:33 10
сообщите пожалуйста о успехах и решениях
0
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
16.10.2013, 16:36  [ТС] 11
Лучший ответ Сообщение было отмечено как решение

Решение

Из баша)))
ххх:объясни мне пожалуйста доступным языком полиморфизм
ууу:короч смотри
ууу:у тебя есть класс коржик, от которого наследуются классы пирожено и морожено
ууу:у коржика есть метод схавать
ууу:но в пирожене он имплементируется как пожевать с чаем, а в морожене - полызькать
ууу:и вот у тебя пакет для коржиков. И ты туда наложила в перемешку пироженые и мороженые и тебе пофиг что ты от туда достанеш, ты вызываеш метод схавать. а уже реализация вызовется автоматом в зависимости от того что достанешь
ууу:вот это полиморфизм
3
XRuZzz
16.10.2013, 16:42
  #12

Не по теме:

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

0
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
17.10.2013, 14:50  [ТС] 13
Цитата Сообщение от Alexxx7 Посмотреть сообщение
сообщите пожалуйста о успехах и решениях
решение я вылажывать не буду, потому что это собеседование я завалил)))
а в общем плане успехи довольно неплохие 1 из 3 удачное собеседование, учитывая ещё что я студент 5го курса.
0
98 / 34 / 10
Регистрация: 24.04.2012
Сообщений: 151
17.10.2013, 14:54 14
если можно подробней о собеседовании, заданиях, вопросах, требованиях. просто тема актуальная, и ни малейшего представления нет, хотелось бы поосновательней поготовится. заранее спасибо.
0
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
17.10.2013, 14:56  [ТС] 15
XRuZzz, большое спасибо за пример с базами и штормом, очень помоголо. Не могли бы вы мне ещё поставить задачу какую небудь простенькую, что б я прокачался в этом + задействовал флаги, типо шторма в ващем примерею. ну или хотяб кусочак кода накинуть.
0
Антикодер
1796 / 861 / 48
Регистрация: 15.09.2012
Сообщений: 3,071
17.10.2013, 15:41 16
Цитата Сообщение от maxon887 Посмотреть сообщение
XRuZzz, большое спасибо за пример с базами и штормом, очень помоголо. Не могли бы вы мне ещё поставить задачу какую небудь простенькую, что б я прокачался в этом + задействовал флаги, типо шторма в ващем примерею. ну или хотяб кусочак кода накинуть.
надо было в статью оформить, просто изначально не думал много писать.

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

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

Либо написать код к моему рассказу про летательные аппараты. Это может быть консольное(текстовое) приложение, но мне лично было бы интересно делать это в графике.
Либо не терять время на мои задачки, и читать Страуструпа(можно конечно кого нить другого почитать, но Страуструпа игнорировать опасно
1
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
17.10.2013, 15:42  [ТС] 17
Alexxx7, Ну я начну с того что я из Беларуси. ИТ сфера у нас более мение развита, в конце концов танки мы сделали(кстати они ща тоже набират программистов(WarGamming), ещё крупные филлиалы Epam, BelHard. Кучи частников. Ну короче есть куда ринуться.
План действий у меня таков:
Создаешь резюме на таких сайтах как rabota.by, jobs.org, ВавяПупкинНайдиРаботу.com и так далее.. Чем больше твоих резюме вист в нете тем лучше. И кстати лучше чуть при уменьшить свои способности, чем преувеличить, ибо они всё равно тебя тогда отсеют на собеседовании.
Ещё я создал копию такого же резюме в вордовском формате. Ибо часто просят прислать на почту.
Далее два варианта
Первый сидеть и ждать)))) ну ещё на до поддерживать актуальность своих резюме(апать так сказать, кто занимался барыжничеством в инете тот поймёт). Ну и все. Тебе время от времени будут звонить рекрутеры(в зависимотсти от крутости твоего резюме, чем круче тем чаше) приглашать на собеседование, рассказывать о компании. Иногда сразу понятно вы друг другу не подходите. Но я, например всё ровно хожу на них))) посмотреть, как да что устроено, как кто работает.
Второй это можно ещё искать вакансии на этих же сайтах и нажимать кнопу типо "Хочу у вас работать", тогда будет больше приглашений(но кстати не намного).
На счет тестовых заданий тут угадать очень сложно, кто-то даёт такую полную абстракцию, что указана выше, кто просит написать функций реверса строки или оптимизировать участок кода. Единственное, что можно точно сказать, так это то что всем надо что б у тебя были сильные знания самого языка. Например если компания ищет разработчика игр С++, и в вакансии компании указано работать с DirectX то тебя по нему сто пудова спрашивать сильно не будут, им главное что бы ты был с мозгами и знал язык( а лучше несколько). А на DirectX они уже сами тебя поднатоскают.Ну вот вроде бы и всё.
1
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() { // реализация }
}
можно ли обобщать интерфейсы для реляционных и не реляционных СУБД? Буду благодарен если кто подскажет. Хотя если немного поразбираться ответ будет очевидным

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.10.2013, 16:14

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

Тестовое задание надолжность Junior C++ gamedev
Всем доброго времени суток. Месяц назад получил от потенциального работодателя тестовое задание...

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

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


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru