КулЛиб - Классная библиотека! Скачать книги бесплатно
Всего книг - 719561 томов
Объем библиотеки - 1440 Гб.
Всего авторов - 276248
Пользователей - 125347

Последние комментарии

Новое на форуме

Новое в блогах

Впечатления

sewowich про Евтушенко: Отряд (Боевая фантастика)

2medicus: Лучше вспомни, как почти вся Европа с 1939 по 1945 была товарищем по оружию для германского вермахта: шла в Ваффен СС, устраивала холокост, пекла снаряды для Третьего рейха. А с 1933 по 39 и позже англосаксонские корпорации вкладывали в индустрию Третьего рейха, "Форд" и "Дженерал Моторс" ставили там свои заводы. А 17 сентября 1939, когда советские войска вошли в Зап.Белоруссию и Зап.Украину (которые, между прочим, были ранее захвачены Польшей

  подробнее ...

Рейтинг: +1 ( 1 за, 0 против).
medicus про Евтушенко: Отряд (Боевая фантастика)

cit anno:
"Но чтобы смертельные враги — бойцы Рабоче — Крестьянской Красной Армии и солдаты германского вермахта стали товарищами по оружию, должно случиться что — то из ряда вон выходящее"

Как в 39-м, когда они уже были товарищами по оружию?

Рейтинг: 0 ( 2 за, 2 против).
iv4f3dorov про Лопатин: Приказ простой… (Альтернативная история)

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

Рейтинг: +3 ( 4 за, 1 против).
medicus про Демина: Не выпускайте чудовищ из шкафа (Детективная фантастика)

Очень. Рублёные. Фразы. По несколько слов. Каждая. Слог от этого выглядит специфическим. Тяжко это читать. Трудно продираться. Устал. На 12% бросил.

Рейтинг: +1 ( 1 за, 0 против).
kiyanyn про Деревянко: Что не так со структурой атомов? (Физика)

Первый признак псевдонаучного бреда на физмат темы - отсутствие формул (или наличие тривиальных, на уровне школьной арифметики) - имеется :)

Отсутствие ссылок на чужие работы - тоже.

Да эти все формальные критерии и ни к чему, и так видно, что автор в физике остановился на уровне учебника 6-7 класса. Даже на советскую "Детскую энциклопедию" не тянет.

Чего их всех так тянет именно в физику? писали б что-то юридически-экономическое

  подробнее ...

Рейтинг: +4 ( 4 за, 0 против).

Как функции, не являющиеся методами, улучшают инкапсуляцию [Скотт Мейерс] (fb2) читать постранично, страница - 5


 [Настройки текста]  [Cбросить фильтры]

Благодарности Благодарю Арона Канду за постановку вопроса, которая привела к этой статье. Благодарю также Джека Ривеса (Jack Reeves), Херба Шутера (Herb Sutter), Дейва Смаллберга (Dave Smallberg), Андрея Александреску (Andrei Alexandrescu), Брюса Екела (Bruce Eckel), Брайна Страуструпа (Bjarne Stroustrup), и Андрю Коунига) Andrew Koenig за комментарии перед публикацией. В заключение, большая благодарность Аделе Новак (Adela Novak) за организации семинаров C++ в Люцерне (Швейцарии), которая вели к многочасовым дискуссиям, позволившим мне написать начальный проект этой статьи.

Заметки и ссылки 

[1] Scott Meyers. Effective C++: 50 Specific Ways to Improve Your Programs and Designs, First Edition (Addison-Wesley, 1991), Item 19.

[2] Scott Meyers. Effective C++, Second Edition (Addison-Wesley, 1998).

[3] The algorithm remains unchanged in current printings of Effective C++, because I'd have to also add the requisite reasoning (this article), and making such a substantial change to a book already in production simply isn't practical.

[4] Effective C++, Item 34.

[5] Erich Gamma et al. Design Patterns, Elements of Reusable Object-Oriented Software (Addison-Wesley, 1995). Also known as the GOF or ''Gang of Four'' book.

[6] James O. Coplien. Advanced C++: Programming Styles and Idioms (Addison-Wesley, 1991).

[7] Herb Sutter. ''Sutter's Mill: What's in a Class?'' C++ Report, March 1998.

[8] Herb Sutter. Exceptional C++ (Addison-Wesley, 1999), Items 31-34.

[9] John Lakos. Large-Scale C++ Software Design (Addison-Wesley, 1996).

[10] Effective C++, Item 18.

[11] Jack Reeves. ''(B)leading Edge: How About Namespaces?,'' C++ Report, April 1999.

[12] Jack Reeves. Personal communication.

Об авторе 

Scott Meyers – известный авторитет по C++; он обеспечивает консультативные услуги клиентам по всему миру. Он автор Effective C++, Second Edition (Addison-Wesley, 1998), More Effective C++ (Addison-Wesley, 1996), и Effective C++ CD (Addison-Wesley, 1999). Скотт получил его Ph. D. в области Информатики в Университета Броуна (Brown University) в 1993.

Примечания. Первая, из перечисленных выше книг переведена на русский язык:

Скотт Мейерс. Эффективное использование C++. 50 рекомендаций по улучшению ваших программных проектов: Пер. с англ. – М.: ДМК, 2000. – 240 с.: ил.

Статья, на мой взгляд, показывает, что не все так гладко в чистых методах объектно-ориентированного проектирования, если приходится прибегать к ухищрениям, присущим чисто процедурному программированию. Конечно, эффект от использования будет очевиден лишь при разработке достаточно больших программных систем, когда программу приходится развивать и модифицировать, а не создавать заново. Но статья намекает, что чисто объектные языки и методы могут оказаться в этом случае весьма неудобными. А значит: прощай Java и C#? Или их ждет ревизия?

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

А.Л.

Шаблоны и функции фабрики в контексте пространства имен

(Врезка)
В основной статье, я утверждаю, что статические методы классов должны быть реализованы как внешние функции всякий раз, когда это возможно, потому что это увеличивает инкапсуляцию класса. Здесь я рассматриваю две возможных реализации для функций фабрики:

// менее инкапсулированный проект

class Widget {

 …

public:

 static Widget* make(/* params */);

};


// более инкапсулированный проект

namespace WidgetStuff {class Widget {…}; Widget* make(/* params */);};

Эндрю Коунинг (Andrew Koenig) подчеркивает, что первый вариант (в котором make является статическим методом класса) позволяет написать шаблонную функцию, которая может вызывать make и не знать порождаемый ею тип:

template‹typename T›

void doSomething(/* params */) {

 // вызвать функцию фабрики для класса T

 T *pt = T::make(/* params */);

 …

}

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

template‹typename T›

void doSomething(/* params */) {

 // нельзя узнать какое T содержит пространство имен!

 T *pt =???::make(/* params */);

 …

}

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