LINUX.ORG.RU

Память это зло

 , ,


0

1

Многие неполноценные создания, проектируя объектно ориентированные интерфейсы, вместо того, чтобы использовать правильный паттерн — делгирование


function Super(){}
Super.prototype.a=1
function Class(){}
Class.prototype=Object.create(Super.prototype)
Class.prototype.constructor=Class
Class.prototype.b=2

instanceOfClass=new Class

alert(instanceOfClass.a) // 1
alert(instanceOfClass.b) // 2

Используют быдло-паттерны, основанные на копировании:


Object.defineProperty(Object.prototype, "extend", {
 value: function(src){
   for(var i in src.prototype) this.prototype[i]=src.prototype[i]
 },
 enumerable: false
})

function Super(){}
Super.prototype.a=1
function Class(){}
Class.extend(Super) // copy
Class.prototype.b=2

instanceOfClass=new Class 

alert(instanceOfClass.a) // 1
alert(instanceOfClass.b) // 2

Super.prototype.a=100
alert(instanceOfClass.a) // 1 still!!!

Как видно, это совсем не одно и то же.

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

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

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

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

Такой вот парадокс памяти. Этот парадокс сродни деградации в человеческом мышлнии — чем больше мы способны запомнить, тем меньше мы мыслим аналитичски, все сводится к поиску по «кешам»

ЗЫ если будут вопросы, отвечу вечером, дела-с

Зачем вообще писать масштабные проекты, в которых несколько слоев суперклассов, на уборгом недоязычке, предназначенном для анимации веб-страниц?

amomymous ★★★ ()

удешевление памяти позволило распространиться JS, а дальше процесс деградации стал неуправляемо лавинообразным

MKuznetsov ★★★★★ ()

Многие неполноценные создания пишут бред на LOR, вместо того, чтобы пойти и подметать улицы. Такой вот парадокс.

qaqa ()
Ответ на: комментарий от amomymous

Потому что есть приложения (rich web application), для которых это очень удобно. К примеру когда я работал с extjs, то без нескольких суперкласов просто невозможно, т.к. идет дублирование кода.

kiotoze ★★★★ ()

Я один не понял при чем тут конкретно память? Да, улучшение средств и технологий уменьшает порог входа, но проблема остается в головах а не в памяти/процессоре/яп/etc.

loz ★★★★★ ()

Страдания с наследованием в js, потом вывод, что наследование не нужно везде пихать

О, наш анонiмус растет над собой, уже не такие банальные откровения пошли :)

goingUp ★★★★★ ()
Ответ на: комментарий от loz

Имеется в виду, видимо, что копирование всегда дороже по памяти, чем делегирование.

anonymous ()

Ну и шлак, уж лучше бы VBS в браузеар был вместо JS.

anonymous ()
Ответ на: комментарий от goingUp

Кстати, кроме делегирования, на замену наследования есть еще другие паттерны, например агрегирование.

goingUp ★★★★★ ()
Ответ на: комментарий от goingUp

Страдания с наследованием в js, потом вывод, что наследование не нужно везде пихать

Нет, там написано, что наследование наследованию рознь, грубо говоря. О том, куда его пихать, а куда не пихать, в теме нет ни слова.

anonymous ()
Ответ на: комментарий от goingUp

делегирования, на замену

Делегирование — это частный случай наследования

anonymous ()

полный дублирования примитивный код

А какая разница во что оно раскрывается, если для нас дублирования нет? В бинарниках тоже «полный дублирования примитивный код».

// безотносительно ОП

buddhist ★★★★★ ()
Ответ на: комментарий от buddhist

Вам показали в чем разница. Если мы меняем свойство в суперклассе, дочерний объект по прежнему ссылается на неактуальное св-во, которого уже нет. Наследование не работает.

anonymous ()
Ответ на: комментарий от anonymous

Делегирование — это частный случай наследования

Автор сбил меня с толку словами «паттерн делегирования» (шаблон проектирования «делегирование» не является частным случаем наследования). А так да, на самом деле он имел в виду js-специфичное делегирование.

goingUp ★★★★★ ()
Ответ на: комментарий от anonymous

Пост полностью читал? Мой вопрос касался только фразы о дублировании

buddhist ★★★★★ ()
Ответ на: комментарий от buddhist

Это взаимозависимые вещи. Одновременно засираем память, и течет абстракция. Засирание памяти само-по себе, это полбеды, хотя тоже не нужно, поэтому и тут разница есть.

anonymous ()
Ответ на: комментарий от buddhist

Java уже нативно в браузерах поддерживается? Я что то пропустил?

umren ★★★★★ ()
Ответ на: комментарий от umren

Пропустил то, что браузеры нужны только для хипстерских поделок :)

Здесь не хватает Bioreactor

buddhist ★★★★★ ()
Последнее исправление: buddhist (всего исправлений: 1)

если будут вопросы, отвечу вечером, дела-с

Ну-ну. Готов спорить, что минимум 3/4 анонимных комментариев тут твои.

redgremlin ★★★★★ ()
Ответ на: комментарий от redgremlin

минимум 3/4 анонимных комментариев тут твои.

Всё так, только ты сильно преуменьшил их количество

Автор - не торт, и отправляется в следующую кармическую реинкарнацию - обычно это помогает на некоторое время снизить градус неадеквата в его тредах...

Pinkbyte ★★★★★ ()
Ответ на: комментарий от buddhist

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

umren ★★★★★ ()

Дело не в дешёвой памяти и не в плохих ЯП. Дело в том, что программист нынче считается хорошей и денежной профессией. Вот и растят все кому не лень (от самых дешёвых шарашек до «крутых ВУЗов») толпы быдлокодеров. Это рынок, все хотят урвать свой кусок. Всё просто.

erfea ★★★★★ ()

Что-то долго шизофреник на этот раз продержался. У мебели уже праздники, что ли?

anonymous ()
Ответ на: комментарий от umren

А ты смешной, жирненький. Капай еще!

anonymous ()

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

Смотрите, он всего в шаге прошел от верного вывода! Может быть в следующий раз поймет, что «несколько слоев суперклассов» - это ошибка в дизайне.

anonymous ()

Уже давно выработал привычку скроллить и проверять автора по тегу javascript. А тут наконец-то приятная новость.

Про память какой-то неадекватный бред, но так-то да, не надо тащить паттерны из одного языка в другой, не надо в прототипный жс костылять классы.

Kalashnikov ★★★ ()
Последнее исправление: Kalashnikov (всего исправлений: 1)

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

anonymous ()

ЗЫ если будут вопросы, отвечу вечером, дела-с

terminator-101

ладно

d ★★★ ()

Просто разработка кода стоит дороже памяти. Но память не бесконечна. Памяти мы обязаны таким vm как java, flash, python, nodejs. И я только рад, что это всё есть. Тебя же никто не заставляет писать плохо. А расхлябанность других программистов - это их проблемы, будут плохо писать - от их программ откажутся.

menangen ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.