Pull to refresh
0
0
SowingSadness @SowingSadness

User

Send message
Пожалуйста, больше никогда не пишите JavaScript раздельно.
Если подобным образом рассуждать, то все десктопные браузеры косячные до невозможности. Один нормальный браузер и тот умер.
Я могу ошибаться, но вроде как парадигма это совокупность действий, определяющих стиль. Т.е. парадигма в программровании — это семейство нотаций, различающихся по методикам.

Вы правы, так оно и есть.
MVC — это парадигма, в которую вписываются семейство паттернов. Паттерн — это реализация и они различны, как вы сказали ранее (М.Фаулер о MVC)
www.itu.dk/courses/VOP/E2005/VOP2005E/8_mvc_krasner_and_pope.pdf
К тому же нужно разобраться в терминах, что есть шаблон. а что есть парадигма.
Но так как вы выделили, что:
что аббревиатурой MVC обычно понимают целое семейство паттернов

уже говорит о том что вы подразумеваете парадигму.
MVC, это не паттерн — это парадигма.
При MVC пользователь взаимодействует с Controller а не со View
Где косяки браузера то?
Да, не совсем удачное решение с кнопкой назад, но блин, браузер страницы открывает отлично.
Чем вам не угодил IE на WP?
За YouTube можете сказать спасибо корпорации «добра». Они заблокировали самое лучшее приложение Youtube как было вообще за всю время на любой из платформы на Windows Phone. Любые попытка MS договориться были отклонены.
Не связано, потому что об этом в самой парадигме не говорится.

p.s.
извините за некрокомментинг :)
etyumentcev прав. Советую почитать автора принципа Б.Мэйера. Книжку ниже я вам уже посоветовал.
Простите меня, но где вы тут увидели нарушение OCP?
По одному методу то, когда принцип касается правила использования классов.
class A
{
     protected $data;
     public function add($item)
     {
        $this->data[] = $item;
     }
}

class B extends A
{
     public function add($item)
     {
        if ($item < 52) {
           throw new Exception("Итем не может быть меньше 52");
        }
        $this->data[] = $item;
     }
}

Вот тут идет нарушение. Класс наследник в методе add бросает исключение, которое не бросает класс родитель. Это нарушение LSP.

Вообще SOLID стараются как можно больше перенести в язык(на сколько это возможно), т.к тогда можно контролировать на уровне компилятора(интерпретатора). Но естественно, это не всегда возможно.
Чуть выше, случайно умудрился ответить :)
Где вы этого бреда нахватались. Что ещё за пост-условие контракта?
В контракте у вас описано, что возвращается итератор. Он как возвращался, так и возвращается. Беда PHP в том что списки и словари объединены, но это отдельная тема. У вас же концептуальное не понимание, что такое свойство контракта.
Контракт это не мифические вещи, которые программист придумал и описал в юнит-тесте, как ему вздумалось, а условия переданные путем языковых конструкций.

Если грубо, то при замене класса его наследником программа должна дальше работать без ошибок. Либо выбрасывать ошибки такого же типа, что кидала и с родительским классом. Всё остальное — это не понимание LSP.

Советую почитать Б.Мэйера «Объектно-ориентированное конструирование программных систем»
В том виде, в котором написано — да.
Подставьте вместо DataCollector AnotherDataCollector, поведение программы не изменится. Изменится результат.

Вопрос, что результат будет вас не удовлетворять — лежит совершенно в другой плоскости.
Забыл про тип возвращаемого значения. Тип возвращаемого значения должен быть такой же как и тип перегружаемого метода.
Если бы я создал класс, такой как пример ниже, то что-то принципиально бы изменилось?

Да, тут явно видны две ошибки.
1. Нарушен Принцип единственной обязанности (класс изменяет объект и что-то вычисляет, используя его как параметр)
2. Нельзя менять входящие параметры в методе.
Дело не в правильности или неправильности вычисления площади квадрата, дело в замене поведения методов класса
Принцип гласит — «Объекты в программе могут быть заменены их наследниками без изменения свойств программы»

Принцип гласит:
Пусть q(x) является свойством, верным относительно объектов x некоторого типа T. Тогда q(y) также должно быть верным для объектов y типа S, где S является подтипом типа T.

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

Извините, но вы не понимаете LSP
Далее, пройдемся по коду:
Функция обрезки:

Что это за ананизм, мы JavaScript не знаем?
es5.javascript.ru/x15.5.html#x15.5.4.20

функция utf8_decode

Я боюсь вас удивить, но то что вы написали укладывается в 1 строчку:
function utf8_decode(s) {
  return decodeURIComponent(escape(s));
}


if(window.location.href.indexOf('vk.com')>1)

ЗАЧЕМ?! Вы же в манифесте всё описали:
developer.chrome.com/extensions/content_scripts

Что это делает на Хабре?!
Чему может обучить данная статья:
— как правильно оформлять расширения?
— как правильно структурировать JS расширения?
— «красивый» JS код?

Information

Rating
Does not participate
Location
Казань, Татарстан, Россия
Registered
Activity