Введение
Объектно-ориентированное программирование (ООП) - это подход к программированию, который использует объекты для взаимосвязи между компонентами системы при построении приложений.
Одним из основных преимуществ ООП перед структурным программированием является совмещение данных и функционала, что позволяет работать с объектами, суть которых максимально приближена к аналогичным объектам из реального мира.
Основные парадигмы объектно-ориентированного подхода это:
- Инкапсуляция (encapsulation)
- Наследование (inheritance)
- Полиморфизм (polymorphism)
Инкапсуляция позволяет скрыть внутреннюю реализацию объекта, что делает API для работы с объектами понятным и неизбыточным.
Наследование позволяет строить иерархии объектов, в которых производные классы наследуют данные и поведение классов-предков.
Полиморфизм добавляет общность при работе с наборами однотипных объектов. Он позволяет работать с этими объектами в унифицированной манере, при этом поведение объектов может различаться.
Целевая аудитория
Большинство современных языков программирования поддерживают объектно-ориентированный подход.
Именно поэтому тест по ООП будет интересен большому количеству разработчиков не зависимо от используемого или предпочитаемого языка программирования.
Структура теста
Тест по основам ООП содержит вопросы по основам объектно-ориентированного подхода к разработке приложений. Большинство вопросов теоретические, тем не менее они требуют глубокого понимания принципов OOP.
Некоторые вопросы теста содержат фрагменты кода на языках C++ или Java. Это сделано для того, чтобы проверить практическую сторону знаний ООП. Тем не менее данные вопросы можно решить даже не зная языки C++ и Java.
Дальнейшее развитие теста
Количество вопросов в тесте по основам ООП пока что не очень велико. Поэтому ближайшие планы команды Quizful в отношении теста по ООП - это расширение списка вопросов по данному тесту.
В будущем также планируется разбить вопросы теста на тематики.
Если Вы хотите помочь в развитии данного теста, присылайте Ваши замечания на адрес quizful at gmail dot com. Также Вы можете предложить свои вопросы для данного теста посредством формы добавления вопросов.
Админам спасибо за сайт !! Не в тему, но всё же )
Будет интересно послушать Ваше мнение по поводу этого вопроса. Ниже в комментариях уже есть ветка на эту тему.
>> эффективного написания
Не понимаю, что Вы имеете в виду. Если Вы о написании кода, то тест не привязан к конкретному языку программирования.
>> проектирования с использованием ООП
А какие вопросы из теста Вы относите к этой категории? Постараемся сделать упор на них.
Так что как говорится в одном бородатом анекдоте : - Хорошо что коровы не летают!!
и как оказалось, я не один такой, кто хочет ответить композиция. так же есть ответы полиморфизм, который впринципе тоже подходит.
У меня есть некоторый опыт в программировании и я делюсь своими знаниями насколько могу. Почему-то Вы мои аргументы не воспринимаете, или не хотите воспринимать.
Все же попытаюсь объяснить еще раз.
1. В вопросе необходимо указать наиболее точный вариант. Заметьте, тут не говорится "единственный вариант", а говорится "наиболее точный".
2. Предложенный Вами вариант с полями типа boolean далек от ООП. Кроме того, он никак не связан с композицией, что я Вам и пытался объяснить. Это просто свойства класса. Если же Вы хотите сделать отдельные класссы CanFly и CanCrawl - это тоже не композиция и является надуманным решением для данной конкретной задачи. Не говорю, что так сделать нельзя, просто исходя из своего опыта могу сказать, что это решение далеко не самое удачное.
interface Flyable {
void fly();
}
interface Crawlable {
void crawl();
}
class Dragon implements Flyable, Crawlable {
public void fly { ... }
public void crawl { ... }
}
Что это нам дает? Например то, что мы можем работать с драконом через интерфейсы. И если у нас появится в программе птица:
class Bird implements Flyable { public void fly() { ... } }
то мы сможем полиморфно вызывать методы fly у птицы и у дракона через интерфейс Flyable.
Мне кажется, что с точки зрения ООП это хорошее решение.
Чуть позже прокомментирую Ваше второе сообщение.
На счет того, чтобы сделать все варианты multi choice - идея хорошая. Но для тетосв по основам это будет слишком сложно - иногда лучше дать возможность человеку провести анализ и найти правильный ответ методом исключения.
пару замечаний/предложений:
- поскольку есть вопросы, относящиеся к паттернам, неплохо было бы переименовать тест и категорию, а то немного конфузно :)
- досадно, что выборка вопросов маленькая: при повторном прохождении вопросы пракически 100% повторились. улучшить ситуацию можно перефразировкой или легкой можификацией уже существующих вопросов. если что интересное придумаю -- обязательно предложу
1. Мы собираемся скоро публиковать тест по паттернам проектирования (без привязки к конкретному языку программирования). Вопросы по паттернам будут перенесены туда. Кстати, можете проголосовать за интересующие Вас тесты на странице - http://www.quizful.net/TestConstructionAction.tests
2. Даже не знаю, как можно переименовать категорию, - ведь паттерны проектирования тоже относятся к ОО подходу.
3. Да, вопросов и правда маловато (всего 15 разных). Стараемся периодически пополнять тесты. Если сможете предложить вопросы для ООП или Паттернов проектирования, будем очень благодарны.