Форум программистов, компьютерный форум, киберфорум
Наши страницы
C# для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C# Преобразовать строки в лексемы http://www.cyberforum.ru/csharp-beginners/thread937178.html
Где ошибка в данной программе и как ее исправить? using System; class TokenizeDemo { static void Main() { string input = { "100 + 19", "100 / 3.3", "-3 * 9", "100 - 87" };
C# Блокировка клавиатуры в форме C# Всем привет! Я уже сделал графический пароль, осталось блокировать клавиатуру дабы пользователь не нажал на кнопку Win или Alt+Ctrl+Del, чтобы попытаться выйти из программы ( я ни в коем случае не... http://www.cyberforum.ru/csharp-beginners/thread937156.html
Коллекции C#
Прочитал в книжке что стоит использовать коллекции из пространства имен System.Collection.Generic, т.к. они лучше чем в System.Collection. но в Generic нет никакого подобия ArrayList, и что делать...
Удаление символов в строке C#
Есть ли такая функция для c# как в php? $vowels = array(";", ":", "/", "http", ","); $loginn = str_replace($vowels, "", $login);
C# Построение лабиринта http://www.cyberforum.ru/csharp-beginners/thread937074.html
я хотел бы построить лабиринт по которому может ходить персонаж но как реализовать понятия не имею) натолкните на решение или помогите вот мой начальный код( заготовочка): using System;...
C# не могу записать инфу в поля Всем доброго времени суток! Вообщем прочитал книгу по шарпу, решил закрепить знания практикой и написать почтовый клиент простейший! Проблема в следующем: записываю логин и пароль в класс Account при... подробнее
Psilon
Master of Orion
Эксперт .NET
6009 / 4859 / 902
Регистрация: 10.07.2011
Сообщений: 14,460
Записей в блоге: 5
Завершенные тесты: 4
13.08.2013, 08:06 0

Задача на логическое мышление на собеседовании

13.08.2013, 08:06. Просмотров 1746. Ответов 6
Метки (Все метки)

Ответ

Razovy, полиморфизм.
Замена условного оператора полиморфизмом (Replace Conditional with Polymorphism)
Есть условный оператор, поведение которого зависит от типа объекта. Переместите каждую ветвь
условного оператора в перегруженный метод подкласса. Сделайте исходный метод абстрактным.
C#
1
2
3
4
5
6
7
8
9
10
11
double getSpeed() {
switch (_type) {
   case EUROPEAN:
      return getBaseSpeed();
   case AFRICAN:
      return getBaseSpeed() - getLoadFactor() * _numberOfCoconuts;
   case NORWEGIAN_BLUE:
      return (_isNailed) ? 0 : getBaseSpeed(_voltage);
}
throw new RuntimeException (“Should be unreachable”);
}
Задача на логическое мышление на собеседовании

Мотивировка
Одним из наиболее внушительно звучащих слов из жаргона объектного программирования является
полиморфизм. Сущность полиморфизма состоит в том, что он позволяет избежать написания явных условных
операторов, когда есть объекты, поведение которых различно в зависимости от их типа.
В результате оказывается, что операторы switch, выполняющие переключение в зависимости от кода типа,
или операторы if-then-else, выполняющие переключение в зависимости от строки типа, в объектно-
ориентированных программах встречаются значительно реже.
Полиморфизм дает многие преимущества. Наибольшая отдача имеет место тогда, когда один и тот же
набор условий появляется во многих местах программы. Если необходимо ввести новый тип, то приходится
отыскивать и изменять все условные операторы. Но при использовании подклассов достаточно создать новый
подкласс и обеспечить в нем соответствующие методы. Клиентам класса не надо знать о подклассах, благодаря
чему сокращается количество зависимостей в системе и упрощается ее модификация.
Техника
Прежде чем применять «Замену условного оператора полиморфизмом» ( Replace Conditional with
Polymorphism), следует создать необходимую иерархию наследования. Такая иерархия может уже иметься как
результат ранее проведенного рефакторинга. Если этой иерархии нет, ее надо создать.
Создать иерархию наследования можно двумя способами: «Заменой кода типа подклассами» ( Replace Type
Code with Subclasses ) и «Заменой кода типа состоянием/стратегией» (Replace Type Code with State/Strategy).
Более простым вариантом является создание подклассов, поэтому по возможности следует выбирать его.
Однако если код типа изменяется после того, как создан объект, применять создание подклассов нельзя, и
необходимо применять паттерн «состояния/стратегии». Паттерн «состояния/стратегии» должен использоваться
и тогда, когда подклассы данного класса уже создаются по другим причинам. Помните, что если несколько
операторов case выполняют переключение по одному и тому же коду типа, для этого кода типа нужно создать
лишь одну иерархию наследования.
Теперь можно предпринять атаку на условный оператор. Код, на который вы нацелились, может быть
оператором switch (case) или оператором if.
Если условный оператор является частью более крупного метода, разделите условный оператор на части и
примените «Выделение метода» ( Extract Method ).
При необходимости воспользуйтесь перемещением метода, чтобы поместить условный оператор в
вершину иерархии наследования.
Выберите один из подклассов. Создайте метод подкласса, перегружающий метод условного оператора.
Скопируйте тело этой ветви условного оператора в метод подкласса и настройте его по месту.
Для этого может потребоваться сделать некоторые закрытые члены надкласса защищенными.
Выполните компиляцию и тестирование.
Удалите скопированную ветвь из условного оператора.
Выполните компиляцию и тестирование.
Повторяйте эти действия с каждой ветвью условного оператора, пока все они не будут превращены в
методы подкласса.
Сделайте метод родительского класса абстрактным


Вернуться к обсуждению:
Задача на логическое мышление на собеседовании
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.08.2013, 08:06

Задача на мышление
помогите пож

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

Задача на собеседовании
Доброго времени суток, написал задачу с собеседования прошу Вас посмотреть, и...

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