Объектно-ориентированный CSS: броская фраза шума или законный подход дизайна?

Если вы можете перейти на C ++ 11, вы должны использовать std::shared_ptr , и ваша проблема решена. shared_ptr позаботится о количестве пользователей указателя и автоматически очистит его, когда последний пользователь удалит его. И я настоятельно рекомендую перейти на современный C ++, это решает большое количество проблем.

Вы также можете взглянуть на Boost SmartPtr - он делает то же самое и может использоваться до C ++ 11.

Вы также можете попробовать реализовать такую ​​утилиту по своему усмотрению, но вы должны убедиться, что реализовали ее должным образом - с счетчиком ссылок, увеличивающимся и уменьшающимся правильно в духе Правило трех

Если вам нужно использовать необработанные указатели, то в стандартном C ++ нет способа гарантировать, что указатель будет (или не будет) освобожден функцией.
Единственный способ сообщить другим программистам, что ваша функция хочет стать владельцем указателя (и удалит его), - это через документацию , либо в коде (с комментариями), либо с помощью отдельного документа (если вы создать API например).

Тем не менее, вы должны тщательно продумать, должна ли функция вступать во владение указателем. Разумно ли для функции владеть ею? Если нет, просто оставьте его и позвольте распределительной функции позаботиться об освобождении.

16
задан Phil.Wheeler 4 September 2011 в 22:45
поделиться

6 ответов

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

  • Объект Класса
  • Экземпляр
  • Метод
  • Передача сообщений
  • Наследование
  • Абстракция
  • Инкапсуляция
  • Полиморфизм
  • Разъединение

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

Так в целом я сказал бы, что это - допустимый подход для разработки CSS объектно-ориентированным способом, но я действительно не назвал бы это Объектно-ориентированным CSS, потому что, по крайней мере, мне, это - что-то очень свойственное к CSS. Это было бы несколько похоже на высказывание, "Я делаю Объектно-ориентированный Java..."

10
ответ дан 30 November 2019 в 17:39
поделиться

Броская фраза шума И законный подход дизайна.

, Хотя я думаю, некоторые идеи там немного наивны в этом, они склонны забывать, что "клиент изменяет eveything, поскольку он идет" парадигма веб-разработки.

5
ответ дан 30 November 2019 в 17:39
поделиться

Я думаю buzzwordiness о вызове, он "Объектно-ориентированный CSS" на самом деле умаляет свою полноценность и более широкое принятие понятия.

, Когда я читал на нем, я думаю заявление, что это было OO, на самом деле замедлил мое понимание того, каково это действительно было.

Люди, которые знают то, что "объектно-ориентированный" означает в программировании, будут скептически настроены, потому что это не действительно OO, не так ли? Это - просто попытка применить некоторые принципы OO к CSS для повышения его эффективности. И с другой стороны, большинство клиентских разработчиков не поймет понятия вообще, если они не будут программистами, и таким образом, они будут просто экранированы или смущены.

Так, большое понятие, ребрендинг потребностей. Максимальный CSS! CSS питания! Рожденный заново CSS! CSS Придал квадратную форму! Главный CSS! Что-то как этот.

4
ответ дан 30 November 2019 в 17:39
поделиться

Я говорил это для годы .

селекторы CSS основаны на идентификаторах экземпляра и классах. Это даже поддерживает множественное наследование. Сколько еще очевидный это могло быть?

красота размышления о CSS в объектных терминах состоит в том, что это становится очень простым, чтобы начать "бросать" Ваши элементы разметки. Нужно то отделение для внезапного становления INotRenderedAnymore? Просто позвольте JS расшириться, это - атрибут класса для соответствия .removed, не бездельничайте со свойствами стиля.

, Очевидно, это - довольно банальный пример, но преимущества должны быть ясными - особенно в контексте управления JS. Можно разъединить JS от фактических стилей, которые он должен изменить, который является и премией обслуживания и абстракции, но также и имеет дополнительные льготы как не установка очень стилей высокой специфики непосредственно (который CSS не может переопределить).

3
ответ дан 30 November 2019 в 17:39
поделиться

это действительно одна из тех спорных вещей, как таблицы против divs и т. Д. И т. Д.

По моему мнению, многие разработчики настолько укоренились в ОО, что пытаются использовать его во всем: сначала в JavaScript, а теперь в CSS. Не поймите меня неправильно, в JavaScript тоже есть элементы ОО, но я отвлекся.

Поскольку CSS уже само по себе является модным словом (все работодатели хотят, чтобы CSS 2.0 подходил в сети), многие новые разработчики открывают для себя его. Это неплохая вещь, однако, как разработчики, они сделали то, что у них получается лучше всего, и попытались улучшить CSS. По мнению разработчиков (я - разработчик), организация CSS в соответствии с принципами ОО имеет смысл - отсюда и новое модное слово.

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

Лично мне все равно, как люди пишут свой CSS - если мне придется поддерживать его, Firebug все равно делает работу тривиальной.

0
ответ дан 30 November 2019 в 17:39
поделиться

CSS во многом похож на объектно-ориентированные языки: напишите

p { color: red }
p span { color: blue }

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

.animal { font-weight:bold; color: blue; } 
.dog:before, .terrier:before { content: "GRRR"; }
.animal, .dog, .terrier { color: brown } 

Теперь вы можете использовать классы животное, собака и терьер в объектно-ориентированной манере.

Важно помнить, что CSS очень хорош в решении проблемы, которую он сделал for: прозрачное указание стилей для элементов. Может быть лучше с большим количеством концепций OO? Я не уверен. Допустим, кто-то говорит: файл CSS был бы проще, если бы он выглядел так:

@class dog @derives_from animal /* the syntax i just invented */
@class terrier @derives_from dog

.animal { font-weight:bold; color: blue; } 
.dog:before { content: "GRRR"; }
.terrier { color: brown } 

Это действительно выглядит проще, но еще более простое решение - отбросить элемент @class, добавив слово «собака» к любому «терьеру» и «животное» к любая «собака» на стороне сервера (тривиальная инструкция replace) или с помощью javascript.

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

1
ответ дан 30 November 2019 в 17:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: