Как стать автором
Обновить
-10
0
Тимур Мишагин @DrNefario

Frontend-developer

Отправить сообщение
«Ну надо же, открыл Америку» — так люди обычно встречают уже давно и, обычно, простую в освоении истину.
И чтобы люди постоянно не заморачивались с этим, мы придумали бота (здесь типа наша ссылка), который будет прослушивать ваш разговор и при встрече подобных утверждений, выкрикивать: «Ну надо же, открыл Америку».

~~~
Текст со степенью КЭПства второго порядка
~~~

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

Спасибо за статью.
Можете указать хакатоны, в которых участвовали.
Спасибо!

Спасибо! Занес в свой book-list.

Спасибо за рекламу! Кажется, я нашел рай.

Короче, github наше все!

Допустим, нам нужно написать программу для вывода различных геометрических фигур на экран. Сейчас у нас есть геометрические фигуры Cube, Sphere. Пусть, все они наследуются от интерфейса Figure. (полиморфизма ради).

Какие вопросы однозначно придут (должны однозначно прийти) нам в голову перед написанием данного приложения?

1.Отличается ли написание кода для вывода различных фигур?
Однозначно, да! Вы не сможете вывести идентичным алгоритмом треугольник и квадрат, поскольку количество вершин уже говорит само за себя. Следовательно, для вывода каждой из этих фигур нужно будет написать разный код.

2. Будут ли добавляться новые фигуры для вывода?
Если «нет» сейчас, то не факт, что потом заказчику не придет в голову начать развивать свой продукт. И тут новые программисты придут и будут плеваться удивляться тому, почему ваша программа не соответсвует принципу «закрытость для изменений, открытость для расширений» (Б.Мейер). И как итог, им придется немало потрудиться… Но уж если вы 100% уверены, что такого не произойдет, то ладно, ладно…

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

Для воплощения есть два принципиально разных подхода: Структурный или ООП-шный. Дабы не рассусоливать здесь столько, сколько бы хватило на целую статью я приведу примеры каждого в коде:

Структурный:

public class FigureShower{
     public void render(Figure figure){
           switch(figure.index){

                case 0:  //Cube
                      ...
                case 1: //Sphere
                      ...
                case n: //Arbitary chosen figure
                      ...
           }
     }
}


ООП-шный:

       public interface Displayable {
             public void render();
       }

       public class Cube implements Displayable {
             public void render(){
                   //instruction for cube rendering
             }
       }

       public class Sphere implements Displayable {
             public void render(){
                   //instruction for sphere rendering
             }
       }
       
       ...

       public class NFigure implements Displayable {
             public void render(){
                   //instruction for n-figure rendering
             }
       }


Можете воскликнуть: да тут то особой разницы по величине кода да и нет! И вы будете правы. Но есть пару моментом на которые стоит обратить внимание.

1.Если программист пользователь захочет сделать фигуру выводимой, то в первом «структурном» случае ему самому вспомнить, что прога не работает, потому что он забыл добавить в switch новые инструкции. В ООП-ном компилятор сам напомнит реализовать функцию.

2. Читается ООП-шное творение куда приятнее. Ну это, конечно, больше дело вкуса…

За большей информацией обращайтесь к Роберту Мартину и его творению «Чистый код»
Хорошая статья. Добавил в избранное.
Ничего себе, думал, что только я один такой вывод сделал :)
Надоело уже наблюдать, как сокурсники зазубривают формулы лишь бы только экзамены сдать. Через пол года спрашиваешь, что такое функция, а в ответ невнятный говор…
Также, я считаю, что по математике материал преподается отдельно от практики.(я не про мехмат). То есть даже нет объяснения того, как и где нам эти знания помогут в будущем. Задачки из задачника на этот вопрос уж точно не отвечают…
После того как увидел собственными глазами, что 4-о классник среди 9-11 классов взял диплом второй степени на олимпиаде МФТИ по информатике, я не удивился, что все это написал человек 9 лет. Так держать!
Не могу сказать наверняка, но фамилии американских участников уж очень сильно напоминают азиатские…
Они негде не применяются сами по себе. Они возникают при построении математических моделей, коих решить вам предстоит для получения результата. И чтобы постоянно не перевыводить все, люди фиксируют формулы/алгоритмы решения. Все ради скорости. Время — самый ценный ресурс.

Информация

В рейтинге
Не участвует
Откуда
Казань, Татарстан, Россия
Дата рождения
Зарегистрирован
Активность

Специализация

Frontend Developer
Middle
От 200 000 ₽
JavaScript
TypeScript
Angular
Webpack
Web development
Redux
Node.js
SASS