3 лучших книги по объектно-ориентированному программированию


Оглавление (нажмите, чтобы открыть):

В какой книге почитать про основы ООП новичку?

02.09.2020, 18:09

Где почитать про основы Windows forms (С++)
Здравствуйте! Программированием занимаюсь давно, но с Windows forms не сталкивался. А вот сейчас.

Подробно почитать про ООП
Доброго времени суток! Ребят где можно подробно почитать про ООП в PHP, чтобы все расписано было.

Какой выбрать задачник к книге »Основы математического анализа»
Только начал изучать мат анализ. Читаю книгу Рудина ,,Основы математического анализа»,все норм,но.

Где могу прочитать про основы ООП?
Где могу прочитать про основы ООП?

В какой книге более понятно обяснается про классы C#?
смотрела пару книг по C#, но во всех классы либо плохо объясняются, либо нет конкретных примеров.

02.09.2020, 18:51 2

jestero, ООП можно описать в 3-4 словах, а можно на несколько страниц. Выбирать вам, насколько подробно хотите изучить этот вопрос.

03.09.2020, 02:59 3 23.11.2020, 21:15 4

Основы объектно-ориентированного программирования:

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

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

Подскажите книгу по объектно ориентированному программированию [закрыт]

Без привязки к языку. Просто хорошую книжку по теме

Закрыт по причине того, что не по теме участниками Oceinic, Pavel Mayorov, PashaPash, Regent, aleksandr barakin 10 окт ’15 в 7:52 .

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

  • «Вопросы-опросники запрещены на Stack Overflow на русском. Для получения ответа, перефразируйте ваш вопрос так, чтобы на него можно было дать однозначно правильный ответ.» – Pavel Mayorov, Regent, aleksandr barakin

Если вопрос можно переформулировать согласно правилам, изложенным в справке, отредактируйте его.

Книги о проектировании и разработке программного обеспечения

Шаблоны проектирования

Э. Гамма Приемы объектно-ориентированного проектирования. Паттерны проектирования / Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес. – СПб.: Питер, 2009. – 366 с.

Классическая и наиболее известная книга о шаблонах проектирования. Описание каждого шаблона достаточно подробное, обычно содержит несколько вариантов реализации с их слабыми и сильными сторонами. Примеры в книге приведены на C++ и Smalltalk, однако словесное описание и UML диаграммы помогут разобраться программистам на других языках. Рекомендую посмотреть книгу всем без исключения будущим программистам.

Джейсон Мак-Колм Смит Элементарные шаблоны проектирования : Пер. с англ. — М. : ООО “И.Д. Вильямс”, 2013. — 304 с.

Книга Мак-Колма более похожа на научный труд, чем на учебник, однако, является достаточно интересной и полезной. В первую очередь рассматриваются элементарные шаблоны — такие, как делегирование, наследование, рекурсия. Затем, показывает как из элементарных шаблонов построить более сложные — при этом шаблоны рассматриваются крайне подробно. Достаточно полезной показалась система обозначений PIN (Pattern Instance Notation), разработанная автором в качестве расширения UML. PIN используется на протяжении всей книги, т.к. позволяет элегантно отображать зависимости между паттернами, не вникая в детали их реализации. В конце приводится описание \(\rho\)-исчисления, являющегося формальной теорией, лежащей в основе шаблонов проектирования. Я рекомендую посмотреть книгу всем программистам, которые этого еще не сделали — будет интересно.

Влиссидес Джон. Применение шаблонов проектирования. Дополнительные штрихи. : Пер. англ. М.: Издательский дом «Вильямс

Хорошее дополнение к книге Гаммы и Хелма с несколько другим способом изложения и местами более интересными примерами. Начинается книга с заблуждений о шаблонах — далеко не все, особенно студенты, понимают как ими пользоваться. По ходу книги автор ставит перед читателем ряд проблем и всякий раз выполняет поиск подходящих шаблонов проектирования, при этом приводится даже некоторый алгоритм выполнения такого поиска. Первым примером книги является проектирование файловой системы (с сущностями «Файл», «Каталог», «Ярлык»), на нем рассматриваются паттерны Composite, Proxy (для реализации «Ярлыка» файла — этот пример сильно отличается от того, что приведено в GoF), Visitor (тоже очень удачное применение) и Template Method (в контексте рефакторинга и инверсного управления). Затем, в пример добавляется владелец файла, но пользователей нужно создавать, а еще они объединяются в группы. На примере системы управления пользователями рассматриваются шаблоны Singleton и Mediator (для связи пользователей с группой «многие ко многим»). В конце второй главы приводится хорошая диаграмма «pattern: role annotation». В третьей главе рассматриваются тонкости и проблемы реализации шаблонов — начинаются с Singleton-а (проблема с зависимостями между несколькими Одиночками, параллельным программированием и освобождением памяти из под них). Затем также рассматривается Observer и Visitor (на мой взгляд, выбран слишком примитивный пример с построением графического интерфейса из двух полей ввода и кнопкой). В конце главы описывается «нестандартный» шаблон Generaton Gap — лично я про него читал впервые, применить вы его сможете лишь в тех случаях если ваша система генерирует исходный код программ, рассматривается он на примере генератора пользовательского интерфейса (типа Qt Designer), но отмечается что нечто подобное используется в YACC. Цель паттерна Generaton Gap — убрать зависимость между сгенерированным системой кодом и тем, что дописывает потом вручную пользователь, для этого предлагается, казалось бы очевидное решение — генерируемый код помещается в базовый класс, который пользователь может наследовать для увеличения функциональности (хотя я бы рассмотрел также вариант с композицией). Последним примером книги является система обработки событий (Event), при этом ставится проблема — типов событий много, но, получив событие, мы не хотим выполнять кучу dynamic_cast для установления его типа. На этом примере описаны шаблоны Mulicast и Typed Message — лично мне это показалось бесполезным. В конце книги приводится рекомендации по разработке шаблонов проектирования (семь правил, которые помогут вам придумать новый шаблон) — я бы назвал это правилами по изучению шаблонов (советую прочитать). В целом, хорошая книга, но с плохим переводом (очень много явных ляпов) и местами устаревшая (т.к. примеры написаны на С++, который развивался и сильно изменился, а книга старая) — например не совсем правильно подмечены недостатки Singleton-а Маерса и описан неактуальный подход с Double-Clecked Locking (хотя для истории и кругозора может пригодится).

Тепляков С. В. Паттерны проектирования на платформе .NET – СПб.: Питер, 2015. – 320 с.

Замечательная книга от разработчика компании Microsoft и известного в узких кругах блогера (до выпуска книги Сергей много писал на тему паттернов проектирования на своем сайте). Не смотря на то, что в названии фигурирует .NET, книга будет полезна всем без исключения разработчикам (в книге Гаммы тоже приводятся примеры на Smalltalk, но это не мешает ей быть классикой). Главы книги можно читать в любом порядке, т.к. они не связаны друг с другом — как и в книге Гаммы разделение по главам осуществляется на основе типов паттернов (паттерны поведения, порождающие паттерны, структурные паттерны), кроме того, есть глава посвященная принципам SOLID. Рассматриваются вопросы unit-тестирования в контексте применения шаблонов проектирования.

UML и объектно-ориентированный анализ

Буч Градди Объектно-ориентированный анализ и проектирование с примерами приложений, 3-е изд. / Буч Градди, Максимчук Роберт А., Энгл Майкл У., Янг Бобби Дж., Коналлен Джим, Хьюстон Келли А.: Пер с англ. — М.: ООО «И.Д. Вильямс», 2010. — 720 с.

Классическая книга по программированию от очень авторитетного автора. В книге есть множество интересных и важных для программиста вещей, но они обильно разбавлены рассуждениями на отвлеченные темы и, на мой взгляд, очень неудачными примерами про теплицы. Во второй вам расскажут про общие принципы ООП; в третьей главе — дополнят некоторыми обозначениями UML и интересным разделом про качество классов и объектов; в четвертой — рассматриваются различные подходы к классификации и уточнению абстракций. Пятая глава книги содержит описание 13 видов UML диаграмм, но на мой взгляд Буч выбрал не самые лучшие примеры и недостаточно времени уделил описанию назначения этих диаграмм. Шестая глава содержит описание процесса разработки программного обеспечения, при этом выделяются макропроцесс (жизненный цикл проекта) и микропроцесс (проектирование) — для них описываются стадии с видами деятельности на каждой из них. Седьмая глава завершает изложение очень коротким описанием организационных вопросов. Вторую половину книги составляют примеры приложений (можно посмотреть в каком порядке Буч предлагает их проектировать и какие виды диаграмм использовать).
Все главы кроме пятой очень обзорные — в них нет смысла вчитываться, по этим темам написаны отдельные толстые книги. Например, про качество ПО в нескольких книгах рассуждает Роберт Мартин, а про проектирование ПО (микропроцесс) написал отдельную книгу Розенберг — при этом он использует другой подход (ICONIX). Очень часто долгие рассуждения Буча касаются очевидных вещей и как бы вы не вчитывались — не получится узнать что-то новое, поэтому я считаю, что книгу достаточно бегло просмотреть. Наиболее полезные, на мой взгляд, части книги:

  • описание элементов объектной модели во второй главе;
  • большая часть третьей главы, посвященная основам ООП;
  • описание UML в пятой главе;
  • по диагонали можно прочитать шестую главу и просмотреть несколько примеров из приложения.
Розенберг Д., Скотт К. Применение объектного моделирования с использованием UML и анализ прецедентов.: Пер. с англ. М.: ДМК Пресс, 2002

Книга посвящена разработке программного обеспечения в соответствии с процессом ICONIX, поэтому несмотря на то, что в названии фигурирует UML — рассматриваются всего 4 вида диаграмм (прецедентов, пригодности, последовательности и классов). Диаграмма пригодности не описана во многих других книгах по UML, т.к. в стандарте UML она описана в дополнении. В книге не только описываются сами диаграммы, но и процесс разработки ICONIX, который является итеративным, что оказывает влияние на процесс построения диаграмм. Каждому виду диаграммы посвящена отдельная глава, в конце которой приводится топ 10 ошибок — это тоже очень полезная и интересная часть. Книга в 7 раз тоньше произведения Буча, а полезной информации, на мой взгляд, в ней больше.

Буч Г., Рамбо Д., Джекобсон А. Язык UML Руководство пользователя — С-П.: Издательство «Питер», 2010 — 432 с.

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

Практически каждый программист слышал словосочетание Rational Rose, но обычно плохо себе представляет что это такое. Мало того, традиционна следующая ситуация: программист что-то услышал о программном продукте, с радостью его установил себе на компьютер (давайте не будем уточнять, как он достал себе копию), запустил программу… а она оказалась совсем не похожей на WinWord. Т.е., как нарисовать стрелку ясно, а что за ней стоит и как это потом использовать — непонятно.

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

Так вот, эта книга, является одной из трех книг, написанных создателями UML. Это полное изложение UML, позволяющее читателю изучить его и приступить к практическому использованию. В книге не рассматриваются принципы объектно-ориентированного анализа, поэтому от читателя потребуется знакомство с ним (например, по соседней книге Буча).

Поэтому, если вы уже применяете UML достаточно долгое время, то «Руководство пользователя» вряд ли будет для вас обладать какой-то особенной ценностью, но если вы хотите овладеть им — нверное, это то что нужно.

Итог:
Книга, несомненно, достойна того, что бы ее прочитали хотя бы для ознакомления с нотацией. Она не является основополагающей, как «Объектно-ориентированный анализ и проектирование» Гради Буча, но все равно достаточно интересна.

Чистый код и рефакторинг

Мартин Р. Чистый код. Создание, анализ и рефакторинг. Библиотека программиста. — СПб.: Питер, 2014. — 464 с.

Книга посвящена вопросам написания программного кода, который легко поддерживать — обсуждаются не только стили кодирования, форматирования, но и, например, структура хорошего кода, юнит-тестирование, использование исключений. В контексте чистого кода описываются некоторые шаблоны проектирования. Альтернативой можно считать книгу Фаулера (она также посвящена чистому коду), но Роберт Мартин пишет гораздо интереснее. Рекомендую прочитать книгу всем студентам, прошедшим курс объектно-ориентированного программирования.

Фаулер М. Рефакторинг. Улучшение существующего кода/ М. Фаулер. Символ-Плюс, 2008. 432 с.
Аллен Э. Типичные ошибки проектирования / Э.Аллен: Пер. с англ. – СПб.: Питер, 2003. – 224 с.

Книги Мартина Фаулера и Эрика Аллена посвящены чистому коду и рефакторингу, но в отличии от книги Боба Мартина, в них делается попытка каталогизации видов рефакторинга (у Фаулера) или ошибок (у Аллена). Если вы разрабатывали что-то чуть-чуть сложнее тетриса — то книги читаются быстро т.к., значительная часть материала вам и так знакома. Книги стоит пролистать, бегло найти интересные моменты и посмотреть их более детально. Покупать их не стоит (я взял на работе почитать), вряд-ли вы будете это перечитывать. С другой стороны, знакомый тимлид требует от работников при рефакторинге указывать конкретный вид (название берется из каталога вот этой книги) в комментарии к коммиту в репозитории. Из книги Аллена мне больше всего понравились главы 2, 3 и 22 — в них можно кое-что узнать об экстремальном программировании, спецификации и тестировании, а также прочитать краткое (но достаточное) описание «паттернов проектирования для отладки». Советую читать именно эти главы.

Другое

Чакон Скотт, Страуб Бен Git для профессионального программиста. — СПб.: Питер, 2020. — 496 с.: ил.

В книге автор рассказывает про систему контроля версий «git», при этом делает это не поверхностно (как многочисленные статьи в интернете), а очень подробно. Главы выстроены таким образом, чтобы читатель сразу мог начать пробовать некоторые команды git, а затем узнавать про различные варианты их использования. Очень помогает читать обилие иллюстраций к примерам. Книга настолько полно описывает git, что после нее по этой теме можно читать только stack overflow (какие-то конкретные вопросы все равно будут возникать), но вы будете уметь работать в команде, использующей git, выбирать оптимальный вариант использования git для своей команды, настраивать git на сервере и т.д.

С. Бобровский Технологии Пентагона на службе российских программистов. Программная инженерия. — СПб.: Питер, 2003. — 222 с.: ил.

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

  1. Очень коротко описываются подходы, позволяющие повысить качество продукта (в т.ч. сократить число ошибок): гибкие практики (Agile), развитие качеств программиста — профессиональные и личностные качества, особое внимание уделяется обучению и мотивации.
  2. Описание истории развития языков программирования. Акцент делается на влияние на этот процесс спец. служб в 20 веке. Кроме того, много написано о том, что большая база кода на устаревших языках мешает забыть о них и, следовательно, препятствует развитию более совершенных языков.
  3. Очень коротко описываются подходы к управлению процессом разработки ПО — такие как C/SCSC и CMM. В частности это процессы управления рисками (превышения бюджета проекта или сроков). Из главы можно узнать о сути предлагаемого подхода их достоинствах и недостатках. Чтобы использовать методики информации недостаточно, к сожалению в книге нет ссылок на литературу, где эту информацию можно получить.
  4. Описаны 2 японских проекта связанных с разработкой систем параллельной обработки данных. Более подробного описания проекта ЭВМ 5 поколения на русском языке я не встречал.
Мастер Йода рекомендует:  Как создать сервер Minecraft

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

Брукс, Ф. Мифический человеко-месяц или как создаются программные системы / Ф. Брукс. — М.: СПб: Символ-Плюс, 2020. — 304 c.

Эта книга не о программировании на конкретном языке. В ней очень ясным, живым языком рассказывается о тех выводах, к которым пришел автор в процессе руководства работы над операционной системой OS/360. Некоторые моменты, конечно же, устарели; например, проблема машинного времени уже не стоит в таком остром ракурсе перед программистами (во всяком случае, в большинстве проектов). Тем не менее, общие рекомендации по обеспечению работы большой группы программистов очень сложно переоценить. Например, вы можете сразу же ответить, что лучше: тысяча посредственных программистов, сто хорошиих или десять гениев? Имеется в виду, для реализации очень крупного проекта в разумное время. Я не говорю о том, что в книге есть ответ на этот вопрос — в книге есть очень полезные мысли на эту тему, которые пригодятся вам при начале работы и наборе сотрудников.

«Мифический человеко-месяц» — это, судя по тому что это выражение вынесено в название, для Брукса самый важный момент в книге. Брукс пишет о том, что нельзя мерять время выполнения проекта просто линейно считая, что если один человек сделает его за сто лет, то сто человек сделают его за один год.

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


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

Посоветуйте книжку по объектно-ориентированному программированию

Доброго времени суток

Сабж. До сих пор пишу скрипты в рамках процедурной парадигмы. Тупо не умею выделить объекты и проработать их взаимодействие. Хотя в институте курс по C++ был. А усложнение скриптов приводит к нагромождению быдлокода.

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

Как вариант, подойдёт совет «ООП уже не нужно, изучай $paradigm». Если под эту парадигму есть хорошая книга, а также актуальный И популярный язык программирования. lisp и брейнфак не предлагать 😀

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

пишу скрипты в рамках процедурной парадигмы

На каком языке? Уточни. Скрипты на Python и PHP предполагают возможность придерживаться ООП-прадигмы из коробки, а Bash-лапша — нет.

В данном случае это не важно. Мне нужно именно научиться применять ООП на практике

Чисто для поддержания разговора — perl и python.

Попробуй поизучать и покодить на Smalltalk (http://squeak.org/), всё же во многом прародитель. Из практики лучше усваивается.

Советую почитать исходники какой-нибудь игры, где ООП самое место.

Мне не нужно изучить какой-либо язык. Мне нужно изучить парадигму программирования. Для этого нужна хорошая книга

Советую почитать исходники какой-нибудь игры, где ООП самое место.

Уж лучше какой-нибудь GUI-программы, на Java, там должно быть ООП во все поля, а читать движки игр для знакомства с ООП это несколько наркоманское занятие.

Meyer «Object-oriented software construction»

Но вообще, тебе не нужно ООП. Почитай что-нибудь о проектировании программ.

Чтобы изучить прадигму программирования, нужна практика. На теории ты далеко не уедешь. А для практики нужно изучить какой-либо язык, в котором эта ООП-прадигма доминирует и сделать какой-нибудь полезный для себя проект. Любая книжка по Java с первых глав вдолбит в тебя что такое объекты/классы/наследование/полиморфизм/инкапсуляция/интерфейсы/абстрактные классы и т. д.

Эти книги должен прочитать каждый, кто считает себя программистом!

Содержание статьи

Польза не во многих, но в хороших книгах.

Сенека

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

С. Макконнелл «Совершенный код»

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

Сложно найти гуру программирования, который не читал «Совершенный код» Стива Макконнелла. Действительно, одна книга, хоть и немаленькая (чуть менее 900 страниц), покрывает практически все аспекты разработки ПО: от рецептов написания высококачественного кода, механизмов тестирования и отладки до стратегий оптимизации кода и психологических факторов, влияющих на разработку. Представь себе: библиография книги занимает 20 страниц и содержит более 500 источников! Книга «Совершенный код» — одно из самых полезных и, как следствие, популярных изданий по разработке ПО. Она неоднократно доказала это, возглавляя рейтинги книг по программированию (goo.gl/3q0kx). Благодаря простой манере изложения, особому стилю и чувству юмора Стива книга читается очень легко.

Говоря о проектировании и конструировании программных систем, Макконнелл выделает Главный Технический Императив Разработки ПО — управление сложностью. Простота и ясность исходного кода и архитектуры системы определяют ее качество. Большая часть книги посвящена написанию высококачественного кода. Макконнелл, как никто другой осознавая значимость мелочей, детально описывает все правила, которыми необходимо руководствоваться при написании хорошего кода. Необходимый уровень абстракции, разработка качественных интерфейсов классов и пакетов, написание высококачественных методов, выбор удачных имен переменных, упрощение управляющих структур, комментирование кода — ничто не ускользает от внимания автора. Например, общим принципам использования переменных отведен целый раздел книги более чем на 100 страниц. Только вопросу выбора имен переменных посвящена целая глава на 30 страниц. При этом все правила и советы даются исключительно с практической точки зрения.

В части, в которой говорится о качестве ПО в целом, Макконнелл формулирует Главный Закон Качества ПО: повышение качества системы снижает расходы на ее разработку. Причина ясна — большую часть времени программисты занимаются чтением и отладкой написанного кода, тогда как на собственно написание уходит около 10% рабочего времени. Поэтому поддержание качества кода системы на высоком уровне экономит много времени и тем самым повышает КПД программиста.

Автор не обходит вниманием и различные методики разработки. Подробно описывается парное программирование, ревизии кода, формальные и неформальные инспекции, разработка на основе тестирования. «Рефакторинг» — единственная глава книги, которую можно назвать «слабоватой». При рассмотрении методов рефакторинга приводится лишь длинный список его видов из книги М. Фаулера «Рефакторинг». При этом нет ни одного конкретного примера кода. Раздел носит скорее ознакомительный характер.

Говоря о повышении производительности ПО, автор приводит убедительные доводы против преждевременной оптимизации, когда программист в процессе разработки интуитивно распознает «узкие» места в программе и незамедлительно принимает меры по оптимизации в ущерб качеству кода. Приводимая статистика показывает, что в 9 из 10 своих предположений программист ошибается.

Подвести итоги можно словами Джона Роббинса: «Это просто самая лучшая книга по конструированию ПО из всех, что когда-либо попадались мне в руки. Каждый разработчик должен иметь ее и перечитывать от корки до корки каждый год. Я ежегодно перечитываю ее на протяжении вот уже девяти лет и все еще узнаю много нового!»

М. Фаулер «Рефакторинг»

Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям.

М. Фаулер

Практически любое издание о рефакторинге ссылается на книгу Мартина Фаулера «Рефакторинг». Действительно, в этой книге Фаулер сделал невозможное — в предельно понятной форме донес до читателей почти полностью исчерпывающее описание понятия «рефакторинг», его назначение, особенности и методы реализации.

При немалом объеме (400 страниц) книга читается буквально за пару вечеров, от нее просто невозможно оторваться. Главная причина головокружительного успеха книги — ее практическая направленность. Все мы знаем, что самая сложная задача при подаче материала — привести хороший показательный пример. В этом Фаулеру нет равных. Книга начинается с примера улучшения программы, который сразу с головой затягивает читателя в мир рефакторинга. Всего 40 страниц примера дают нам вполне конкретное представление о рефакторинге, его целях, принципах и основных методах реализации. Мартин определяет рефакторинг как «изменение во внутренней структуре ПО, имеющее целью облегчить понимание его работы и упростить модификацию, не затрагивая наблюдаемого поведения». Но когда необходимо проводить данное изменение? Какой код должен подвергаться переработке? Автор дает исчерпывающие ответы на эти вопросы. Он вводит правило «трех ударов»: «После трех ударов начинайте рефакторинг». То есть когда вы делаете что-то аналогичное в третий раз, это сигнал для начала рефакторинга. Раздел «Код с душком» дает нам четкое представление о том, какой же код требует улучшения. К признакам такого кода относятся: длинный метод, большой класс, длинный список параметров метода, дублирование кода, операторы типа switch, временные поля, отказ от наследства, неуместная близость классов и многое другое.

Фаулер, как сторонник TDD (Test-driven development), посвящает главу книги созданию автоматических тестов и описанию среды JUnit. Если обнаружена ошибка, сначала необходимо написать автоматический тест, выявляющий ее, и лишь затем проводить исправление. Это позволит в будущем не наступать на одни и те же грабли. Аналогично перед проведением рефакторинга следует написать тест для улучшаемого кода, чтобы обеспечить неизменность его поведения.

Бо́льшую часть книги занимает каталог методов рефакторинга. Он содержит разделы, посвященные составлению методов, перемещению функций между объектами, организации данных, упрощению условных выражений и вызовов методов, решению задач обобщения и крупным архитектурным рефакторингам. Многие из методов рефакторинга автоматизированы в популярных IDE. Например, Visual Studio предоставляет возможности по автоматическому выделению метода (ExtractMethod), удалению параметра (RemoveParameter), выделению интерфейса (ExtractInterface) и пр. В качестве крупных рефакторингов уровня системы Фаулер приводит следующие: разделение иерархии наследования, выполняющей более одной задачи, преобразование процедурного подхода к проектированию в объектно-ориентированный подход, отделение предметной области от уровня представления, а также выделение иерархии, подразумевающее разбиение большого класса на целую иерархию значительно меньших по размеру и более специализированных подклассов.

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

Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес «Паттерны проектирования»

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

Э. Гамма

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

Очень часто начинающий разработчик самостоятельно берется за решение уже более тысячи раз решенной до него задачи проектирования и изобретает очередную разновидность пятиколесного велосипеда, истинно гордясь своим «новшеством». Владение языком паттернов позволяет решить множество задач проектирования наиболее оптимальным способом, затрачивая при этом минимум усилий. Всего двадцать описанных в книге паттернов предоставляют инструментарий для решения огромного спектра задач проектирования ПО. Материал книги довольно сложен и требует от читателя определенных знаний в области объектно-ориентированного проектировании. Для освоения паттернов недостаточно просто прочитать книгу, необходимо основательно над ней «попотеть». Впрочем, твои усилия не пройдут даром. Книга содержит 350 страниц и состоит из двух частей. В первой части дается общее понятие паттернов проектирования, описывается их практическое применение на примере создания визуального редактора документов Lexi. Вторая часть книги содержит каталог паттернов с подробным описанием назначения, структуры, особенностей реализации и примерами применения каждого паттерна.

Коллектив авторов известен как Gang of Four («Банда четырех»), поэтому представленные в книге паттерны называют GoF. Авторы разбивают все множество представленных паттернов на три группы: порождающие паттерны, структурные паттерны и паттерны поведения. Порождающие паттерны решают задачу инстанцирования (создание экземпляров) классов. К самым популярным паттернам в данной группе можно отнести AbstractFactory (абстрактная фабрика), FactoryMethod (фабричный метод) и Singleton (одиночка).

Структурные паттерны предназначены для решения вопросов компоновки системы на основе классов и объектов. К ним относятся такие важнейшие паттерны, как Adapter (адаптер), Bridge (мост), Composite (компоновщик), Proxy (заместитель) и Façade (фасад). Паттерны поведения связаны с алгоритмами и вопросами распределения обязанностей между классами. Здесь необходимо упомянуть Strategy (стратегия), TemplateMethod (шаблонный метод), Observer (наблюдатель), Command (команда) и Iterator (итератор).

Единственное, что может смутить читателя, — некоторые примеры в книге написаны на малоизвестном на сегодняшний день языке программирования Smalltalk, а для изображения диаграмм классов вместо привычного UML используется OMT (Object Modeling Technique).

Гуру ООАиП Мартин Фаулер пишет: «Паттерны GoF — это лучшая из когда-либо изданных книг по объектно-ориентированному проектированию. Эта книга чрезвычайно влиятельна в индустрии программного обеспечения — только посмотрите на библиотеки Java и .NET, которые буквально кишат паттернами GoF». Не существует специалиста в области объектно-ориентированного проектирования, незнакомого с паттернами GoF, а если такой и есть, то в этом случае его, скорее всего, нельзя назвать специалистом.

Р. Мартин «Чистый код»

Умение писать код — тяжелая работа. Она не ограничивается знанием паттернов и принципов. Над кодом необходимо попотеть.

Р. Мартин

«Чистый код» — одна из наиболее удачных книг, посвященных написанию высококачественного кода. Размер книги — 360 страниц, не считая приложений. При этом она настолько увлекательна и доступна, что за два-три вечера запросто прочитаешь ее от корки до корки. В дружеской манере «дядюшка» Боб рассказывает нам, какими же принципами нужно руководствоваться, чтобы писать хороший код. Книга изобилует примерами из реальных приложений, с которыми автор сталкивался в своей практике. Среди них такие известные продукты, как JUnit, FitNesse, JDepend, Ant и TomCat.

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

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

Мастер Йода рекомендует:  JavaScript и объектная модель Javascript

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

При создании функций во главу угла ставятся компактность, правило одной операции и одного уровня абстракции — очевидные на первый взгляд принципы, которые так часто нарушаются программистами. Будучи ярым адептом TDD, Мартин указывает на важность «чистоты» не только кода конечного продукта, но и кода модульных тестов. Он иронически замечает: «Какими отличительными признаками характеризуется чистый тест? Тремя: удобочитаемостью, удобочитаемостью и удобочитаемостью».

Пожалуй, единственный недостаток книги — это ее Java-ориентированность. Все представленные примеры написаны исключительно на языке Java. При этом большое количество советов и «запахов кода» характерны в основном для Java-кода.

В начале книги Роберт приводит ответы мэтров программирования на вопрос, что же такое «чистый код». Грэди Буч отвечает: «Чистый код прост и прямолинеен. Чистый код читается, как хорошо написанная проза. Чистый код никогда не затемняет намерения проектировщика; он полон четких абстракций и простых линий передачи управления». Программисты, которые стремятся писать «чистый код», просто обязаны прочитать эту книгу.

Д. Кнут «Искусство программирования»

Лучший способ в чем-то разобраться до конца — это попробовать научить этому компьютер.

Д. Кнут

Программист, у которого нет книги «Искусство программирования», как священнослужитель, у которого нет Библии. Монографию Дональда Кнута часто называют «Библией программиста». Она содержит подробное описание и анализ важнейших фундаментальных алгоритмов, используемых в информатике, а также множество практических задач для усвоения и закрепления представленного материала. Журнал American Scientist включил работу Кнута в список двенадцати лучших физико-математических монографий XX века наряду с работой Эйнштейна по теории относительности. Успех книги определило качество изложения и глубина анализа общих вопросов программирования.

Кнут начал работу над «Искусством программирования» еще в 1962 году. По замыслу автора монография должна состоять из семи томов. Пока было издано три первых тома, а также первая половина четвертого. Все изданные на сегодняшний день материалы составляют почти 3000 страниц. Читать книгу совсем не просто (как, впрочем, и Библию), главным образом потому, что все примеры рассматриваются на низкоуровневом языке программирования — ассемблере для гипотетического выдуманного автором компьютера MIX. Поэтому у программиста вряд ли получится использовать книгу в качестве набора готовых рецептов для решения конкретных задач. Эта книга дает программисту не рыбу, а скорее хорошую удочку, с помощью которой он сможет не без определенных усилий самостоятельно наловить рыбы.


Первый том посвящен основным алгоритмам и состоит из двух глав. Первая глава подготавливает читателя к работе над книгой. Здесь рассматриваются основные математические понятия и теоремы, на которых базируется весь материал. Читатель знакомится с «полиненасыщенным компьютером» MIX, его архитектурой и его языком ассемблера. Вторая глава посвящена информационным структурам и алгоритмам работы с ними. Здесь рассматриваются деревья, многосвязные структуры, линейные списки, в том числе стеки, очереди, деки, циклические и дважды связанные списки и прочее.

Второй том включает в себя третью и четвертую главы. Третья глава посвящена работе со случайными числами и последовательностями. В четвертой главе описываются вопросы арифметики, а именно различные виды систем счисления, арифметика чисел с плавающей точкой и рациональных чисел, полиномиальная арифметика и другое. Третий том посвящен алгоритмам сортировки и поиска (соответственно, главы 5 и 6). Из четвертого тома опубликованы материалы седьмой главы, описывающей вопросы комбинаторного поиска.

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

В своем отзыве о работе Кнута Билл Гейтс сказал: «Если вы считаете себя действительно хорошим программистом… прочитайте „Искусство программирования“ (Кнута)… Если вы сможете прочесть весь этот труд, то вам определенно следует отправить мне резюме». Цитата лишний раз подчеркивает, что, несмотря на сложность материала, настоящий профессионал обязательно должен осилить труд Дональда Эрвина Кнута «Искусство программирования».

Э. Хант, Д. Томас «Программист-прагматик»

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

Эндрю Хант

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

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

Одним из самых замечательных принципов программирования, которым мы обязаны авторам, является принцип DRY (Don’t Repeat Yourself), что в переводе на русский означает: «Не повторяй самого себя». Это значит, что каждый фрагмент знания должен иметь единственное и однозначное представление в системе. Следование данному принципу позволяет повысить надежность, доступность и простоту сопровождения программного продукта.

В главе, посвященной общей философии прагматичного программирования, мы узнаем, каким авторы видят программиста-прагматика: он всегда принимает ответственность за свой код, следит за состоянием своего продукта, постоянно совершенствуется, общается и находит компромисс с пользователями. Глава «Прагматический подход» говорит об общих методиках разработки и оценки трудоемкости проектов. Важнейшая глава «Гибкость против хрупкости» рассказывает, каким же образом необходимо создавать действительно гибкие и устойчивые к изменению системы. Из главы «Перед тем, как начать проект» можно узнать о процедуре формирования и утверждения требований к системе. «Прагматические проекты» знакомят нас с критическими аспектами создания реальных проектов, такими как работа в команде, тестирование и формирование документации.

Единственное, что может подпортить впечатление о книге, так это недостаточно качественный перевод на русский язык и наличие множества опечаток. Книгу лучше всего читать в оригинале на английском языке. Нельзя не согласиться с отзывом Кента Бека: «Главное в этой книге то, что она поддерживает процесс создания программ в хорошей форме. [Книга] способствует вашему постоянному росту и явно написана людьми, знающими толк в программировании». Если вы стремитесь к постоянному росту как программист, эта книга обязательна к прочтению.

Заключение

Значение хороших книг по программированию сложно переоценить. Каждая из описанных книг позволяет совершить огромный скачок в развитии. «Искусство программирования» закладывает прочный фундамент, обучая нас фундаментальным алгоритмам и приемам программирования. «Совершенный код» позволяет выйти на новый качественный уровень конструирования ПО. «Чистый код» и «Рефакторинг» учат нас внимательнее относиться к качеству кода и поддерживать его в идеальном состоянии. «Программист-прагматик» подсказывает, как же реально добиться практического успеха при разработке ПО. «Паттерны проектирования» вооружают тяжелой артиллерией паттернов для решения множества задач проектирования.

Книги по программированию

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

Мои характеристики:
-Уровень у меня (лично я считаю) ниже среднего.
-Языки, с которыми я собираюсь работать: Java и C++ (понятное дело, что за лето разобраться я смогу только с одним).

Заранее благодарю.
Два комментария для минусов ниже, не минусите, пожалуйста. Мне это действительно важно.

Дубликаты не найдены

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

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

«вот с её написанием появляются проблемы» — вот для этого и нужно знание алгоритмизации.
Pascal — как первый язык, тем и хорош, что ничего за тебя не сделает, никаких встроенных сортировок и прочих нужных программисту вещей.

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

Я в Java споткнулся на адово-монструозном ООП, а сейчас другие задачи(pure C, микроконтроллеры, паяльник в зубах).

Могу еще посоветовать Python — красив, лаконичен, универсален. По-своему хорошо голову на место ставит. И писать на нем приятно. Java может быть когда-нибудь добью, а С++ — для меня не вариант, есть интереснее способы жизнь потратить.

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

Мне говорили, что Python очень сильно на Паскаль похож, вот я и не думала о нём.

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

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

Базовая школьная программа + то, что учила сама.
В школе проходился Паскаль, сама я изучала C++.
Ну самым сложным (на мой взгляд) из того, что я делала, были:
-змейка
-куча программок на вывод определённых чисел (вроде первых 1000 простых, чисел Фибоначчи), на построение функций.

Полагаю, что это уровень чайника.

Ну если можешь написать змейку по памяти, то это уже неплохо.

Важны не столько знания языков, сколько знание алгоритмизации.

Ниже мой коммент в ответ на такой же вопрос, там то с чего я начинал Java.
#comment_47035718

А по поводу С++. «A picture is worth a thousand words»

почему всегда забывают самый главный учебник , более важный, чем все остальные в начале пути —

называется SICP. Ставь среду разработки racket и вперёд, осваивать магию

сейчас есть большая разница между языком и его миром, т.е. c++ lang и c++ world это огромная разница, также как java lang/java world итд.

Но главное это не запоминать этот самый world, кроме способности его использовать и искать информацию. Самое главное в разработке софта — это проектирование приложений. Уже спроектированное приложение можно написать на любом языке, вооружившись справочником.

Например если надо сделать калькулятор, то должны встать вопросы — а как калькулятор узнаёт, что мы хотим посчитать, а как калькулятор покажем нам результат. Как вычислить этот результат.

Каждый из этих вопросов будет порождать свои вопросы в зависимости от того, какой калькулятор в каком воплощении нам нужен и что нам доступно в том мире(world), где этот калькулятор будет воплощён.

Рано или поздно окажется, что сложность приложений слишком сильно растёт и понимание, как работает приложение его автор имеет только при глубокой концентрации. Тогда начинается сражение со сложностью, которое ведут с переменным успехом все разработчики и появляется понимание — зачем нужно делать программы так, как делаются изделия в реальном мире — полностью автономными и вооружённые парой ручек управления и индикатором.

Вот всё это — разработка, а языки и их миры это просто инструменты. И SICP — одна из книг о разработке

По С++:
Роберт Лафоре «Объектно-ориентированное программирование в С++».
Роберт Седжвик «Алгоритмы на C++»
Николаи М. Джосаттис «Стандартная библиотека C++. Справочное руководство».
Энтони Уильямс «Параллельное программирование на С++ в действии. Практика разработки многопоточных программ».

А это чтобы не говнокодить 🙂
Стив Макконнелл «Совершенный код»

Комментарий дня

Хех) Заболел палец указательный пару лет назад. Начал нарывать на кончике. Пошел к врачу,вскрыли, извлекли кусочек тонкого стекла. Был в шоке. Позвонил,рассказал матери,а она вспомнила,что я в возрасте лет трёх разбил градусник и порезался осколками.

Бертран Мейер — Основы объектно-ориентированного программирования

99 Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания.

Скачивание начинается. Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Описание книги «Основы объектно-ориентированного программирования»

Описание и краткое содержание «Основы объектно-ориентированного программирования» читать бесплатно онлайн.

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

В книге Бертрана Мейера рассматриваются основы объектно-ориентированного программирования. Изложение начинается с рассмотрения критериев качества программных систем и обоснования того, как объектная технология разработки может обеспечить требуемое качество. Основные понятия объектной технологии и соответствующая нотация появляются как результат тщательного анализа и обсуждений. Подробно рассматривается понятие класса — центральное понятие объектной технологии. Рассматривается абстрактный тип данных, лежащий в основе класса, совмещение классом роли типа данных и модуля и другие аспекты построения класса. Столь же подробно рассматриваются объекты и проблемы управления памятью. Большая часть книги уделена отношениям между классами – наследованию, универсализации и их роли в построении программных систем. Важную часть книги составляет введение понятия контракта, описание технологии проектирования по контракту, как механизма, обеспечивающего корректность создаваемых программ. Не обойдены вниманием и другие важные темы объектного программирования – скрытие информации, статическая типизация, динамическое связывание и обработка исключений. Глубина охвата рассматриваемых тем делает книгу Бертрана Мейера незаменимой для понимания основ объектного программирования.

Автор: Мейер Бертран

Название: Основы объектно-ориентированного программирования

Содержание

Лекция 1. Качество ПО

Лекция 2. Критерии объектной ориентации

Лекция 3. Модульность

Лекция 4. Подходы к повторному использованию

Лекция 5. К объектной технологии

Лекция 6. Абстрактные типы данных (АТД)


Лекция 7. Статические структуры: классы

Лекция 8. Динамические структуры: объекты

Лекция 9. Управление памятью

Лекция 10. Универсализация

Лекция 11. Проектирование по контракту: построение надежного ПО

Лекция 12. Когда контракт нарушается: обработка исключений

Лекция 13. Поддерживающие механизмы

Лекция 14. Введение в наследование

Лекция 15. Множественное наследование

Лекция 16. Техника наследования

Лекция 17. Типизация

Лекция 18. Глобальные объекты и константы

Лекция 1. Качество ПО

Качество — это цель инженерной деятельности; построение качественного ПО (software) — цель программной инженерии (software engineering). В данной книге рассматриваются средства и технические приемы, позволяющие значительно улучшить качество ПО. Прежде чем приступить к изучению этих средств и приемов, следует хорошо представлять нашу цель. Качество ПО лучше всего описывается комбинацией ряда факторов. В этой лекции мы постараемся проанализировать некоторые из них, покажем, где необходимы улучшения, и укажем дорогу в дальнейшем путешествии по лекциям этого курса.

Внешние и внутренние факторы

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

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

Такие характеристики ПО, как модульность или читаемость, являются внутренними факторами, понятными только для профессионалов, имеющих доступ к тексту ПО.

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

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

Мастер Йода рекомендует:  Где можно бесплатно скачать обои для Android

Обзор внешних факторов

Рассмотрим самые важные внешние факторы качества, стремление к которым есть центральная задача ОО-построения ПО.

Определение: корректность

Корректность — это способность ПО выполнять точные задачи так, как они определены их спецификацией.

Корректность является важнейшим качеством. Если система не делает того, что она должна делать, то все остальное — ее быстродействие, хороший пользовательский интерфейс — не имеет особого значения.

Но легче сказать, чем сделать. Даже первый шаг к корректности уже труден: необходимо в точной форме специфицировать технические требования к системе, что само по себе является тяжелой задачей.

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

Рис. 1.1. Слои в разработке ПО

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

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

Рис. 1.2. Уровни в процессе разработки, включающем повторное использование

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

Многие практики полагают, что достижение корректности ПО связано с тестированием и исправлением ошибок. Мы же более амбициозны: в дальнейших лекциях исследуется ряд технических приемов, в частности типизация и метод утверждений, направленных на построение ПО, корректного с самого начала. Исправление ошибок и тестирование, конечно, остаются необходимыми как средства дополнительной проверки результата. Можно было бы пойти дальше и принять совсем формальный подход к построению ПО. Это не является целью наших лекций, как ясно из несколько «робких» терминов — «проверять», «гарантировать», «обеспечивать», используемых выше вместо слова «доказывать». Все же многие из описанных ниже технических приемов происходят непосредственно от математических методов формальной спецификации и верификации программ, проходя длинный путь к обеспечению идеала корректности.

Определение: устойчивость

Устойчивость — это способность ПО соответствующим образом реагировать на аварийные ситуации.

Устойчивость дополняет корректность. Корректность относится к поведению системы в случаях, определенных спецификацией; устойчивость характеризует то, что происходит за пределами этой спецификации.

Рис. 1.3. Устойчивость против корректности

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

Это определение «аварийной ситуации» нам еще понадобится при изучении обработки исключений (Об исключительных ситуациях см. лекция 12). Оно подразумевает, что понятия нормальной и аварийной ситуации всегда относительны по отношению к заданной спецификации; ситуация аварийна, если она выходит за рамки спецификации. Если расширить спецификацию, аварийные случаи становятся нормальными — даже если они соответствуют таким нежелательным событиям, как, например, ошибочный ввод пользователя.

Термин «нормальный» в этом смысле не означает «желательный», а просто «запланированный в проекте ПО». Хотя на первый взгляд может показаться парадоксальным, что ошибочный ввод может называться нормальным случаем, любой другой подход опирается на субъективные критерии и, таким образом, бесполезен.

Всегда будут существовать случаи, на которые спецификация явно не распространяется. Роль требования устойчивости — удостовериться, что и в таких случаях система не приводит к непоправимой ситуации; она должна выдать соответствующее сообщение об ошибке, гладко завершить работу или войти в так называемый режим «постепенного вывода из работы».

Определение: расширяемость

Расширяемость — это легкость адаптации ПО к изменениям спецификации.

Объектно-ориентированное программирование. Учебник

Новинки раздела «Наука и техника»

Лучшие продажи раздела «Наука и техника»

В комплект входят: Два тома базового учебника для начального уровня. Пособие по иероглифике. Приложение на CD. Предлагаемый учебник содержит сведения, которые обычно определяются как базисные при изучении японского языка. Это — основы японской. В комплект входят:
Два тома базового учебника для начального уровня.
Пособие по иероглифике.
Приложение на CD.

Предлагаемый учебник содержит сведения, которые обычно определяются как базисные при изучении японского языка. Это — основы японской письменности, фонетики и грамматики. Материал учебника построен на страноведческой тематике. Форма и типы упражнений способствуют развитию в первую очередь навыков устной речи.
Издание предназначено для широкого круга лиц, приступающих к изучению японского языка. Скрыть Показать весь текст

Отзывы

В наших магазинах

Подписка на новости

Будьте в курсе наших акций:

2011—2020, ООО «Новый Книжный Центр». Перепечатка материалов сайта возможна только с указанием активной ссылки на сайт «Читай–город».

Объектно-ориентированное программирование (ООП): 32 книги — скачать в fb2, txt на андроид или читать онлайн

Объектно-ориентированное программирование (ООП)

Слишком много книг? Вы можете уточнить книги по запросу «Объектно-ориентированное программирование (ООП)» (в скобках показано количество книг для данного уточнения)

Python 3 и PyQt 5. Разработка приложений

Описан язык Python 3: типы данных, операторы, условия, циклы, регулярные выражения, функции, инструменты объектно-ориентированного программирования, работа с файлами и каталогами, часто используемые модули стандартной библиотеки. Приведены основы базы данных SQLite, интерфейс доступа к базе и спосо…

Программирование на С++

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

Программирование на С++

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

Python. К вершинам мастерства

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


Visual C++ на примерах

Рассмотрены интерфейс системы программирования Visual C++, техника создания и отладки проектов приложений в среде Visual Studio 2005. Описаны основы языка С++: типы данных и операции, приемы программирования разветвлений и циклов, техника работы со статическими и динамическими массивами, использова…

Современный Fortran на практике

Язык программирования Fortran изначально был предназначен для математических вычислений с максимальной производительностью. В последний стандарт Fortran 2008 включено множество современных функциональных возможностей: средства объектно-ориентированного программирования, специализированные операции …

Основные концепции и механизмы объектно-ориентированного программирования

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

Унифицированная метамодель объектной системы

В статье описана унифицированная метамодель объектной системы, разработанная автором и использованная им при разработке крупных программных комплексов в течение последних нескольких лет. Работа является развитием материала, кратко представленного в статье «Концепция создания обслуживающей корпорати…

Язык программирования Go. Руководство 2020

Go – это язык программирования нового поколения, разрабатываемый в недрах Google изначально для собственных нужд, а ныне поддерживаемый OpenSource-сообществом. Совмещая простоту и мощность, Go вполне способен заменить С/С++ и JavaScript, как бы это странно ни звучало. На западе Go уже давно вошёл…

Современное логическое программирование на языке Visual Prolog 7.5

В учебнике излагается полный набор классических и новейших инструментов логического программирования, а также парадигмы функционального, обобщенного, императивного и объектно-ориентированного программирования, органически вошедшие в Visual Prolog 7.5. Рассматриваются основные способы представления …

Dart в действии

Dart – язык программирования для разработки веб-приложений, созданный компанией Google. Он обладает современными объектно-ориентированными средствами, как Java или C#, не отказываясь при этом от свойственных JavaScript динамичности и ориентированности на функциональное программирование. Написанные …

Наиболее эффективное использование С++. 35 новых рекомендаций по улучшению ваших программ и проектов

Автор книги «Наиболее эффективное использование C++» предлагает 35 новых способов улучшения ваших программ. Основываясь на своем многолетнем опыте, С. Мейерс объясняет, как писать наиболее эффективные программы: надежные, совместимые, переносимые и пригодные для повторного использования, то есть пр…

Приемы объектно-ориентированного проектирования. Паттерны проектирования

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

Языки программирования. Концепции и принципы

Рассмотрены фундаментальные концепции и принципы, воплощенные в современных и перспективных языках программирования. Представлены разные стили программирования (операционный, ситуационный, функциональный, реляционный, параллельный, объектно-ориентированный). Базовые концепции и принципы рассмотрены…

Программирование на Visual Basic 6.5 и Visual Basic.Net

На большом количестве оригинальных примеров рассмотрены принципы объектно-ориентированного программирования в средах Visual Basic 6.5 и Visual Basic.Net. Приводимые программы снабжены подробными комментариями с детальными объяснениями используемого алгоритма и синтаксиса языка. Большое внимание уде…

Программирование на Go. Разработка приложений XXI века

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

UML 2.0. Объектно-ориентированное моделирование и разработка

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

Объектно-ориентированное программирование – это фундамент современных языков программирования, включая C++, Java, C#, Visual Basic, .NET, Ruby и Objective-C. Кроме того, объекты лежат в основе многих веб-технологий, например JavaScript, Python и PHP. Объектно-ориентированное программирование обесп…

Современный PHP. Новые возможности и передовой опыт

Из книги вы узнаете, как PHP превратился в зрелый полнофункциональный объектно-ориентированный язык, с пространствами имен и постоянно растущей коллекцией библиотек компонентов. Автор демонстрирует новые возможности языка на практике. Вы узнаете о передовых методах проектирования и конструирования …

Программирование. Принципы и практика использования C++

Вводный курс программирования, написанный автором языка C++. Подготовка к созданию реальных программ. Автор книги полагает, что читатели в конце концов начнут писать нетривиальные программы либо в качестве профессиональных разработчиков программного обеспечения, либо в качестве программистов, р…

Программирование для студентов и школьников на примере Small Basic

Книга предназначена для начинающих программировать школьников и студентов. Материал излагается доступным языком на примерах из повседневной жизни. Раскрыты основные определения: алгоритм, программа, программирование. Рассмотрены базовые понятия языков программирования: объекты, переменные, присваив…

C/C++ и Borland C++ Builder для студента

Книга является руководством для студентов, начинающих изучать среду Borland C++ Builder и языки программирования C/C++. Рассмотрены основные элементы языков C/C++ и примеры создания простейших классов и программ. Изложены принципы визуального проектирования и событийного программирования. На конкре…

Основы программирования в Turbo C++

Книга представляет собой пособие по программированию в Turbo С++. В ней подробно рассмотрен процесс создания программы: от разработки диалогового окна и функций обработки событий до создания справочной системы и установочного компакт-диска. В доступной форме изложены принципы визуального проектиров…

Основы программирования в Delphi 7 (2-е издание)

Книга является руководством по программированию в среде Delphi 7. Описывается весь процесс разработки программы: от создания диалогового окна до организации справочной системы и создания установочного компакт-диска. Материал включает ряд тем, которые, как правило, остаются за рамками книг, адресова…

Прикладное программирование на С/С++: с нуля до мультимедийных и сетевых приложений

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

Программирование в Turbo Pascal 7.0 и Delphi

Книга позволяет научиться программированию на языке Pascal в среде Turbo Pascal. Рассмотрен весь процесс создания программы: от разработки алгоритма до получения результата – готовой программы. Приведено описание языка программирования и среды разработки; рассмотрены основные типы данных и алгоритм…

C++. От ламера до программера

Эта книга предлагает быстрый способ изучить принципы объектно-ориентированного программирования и освоить практику программирования на языке С++ новейшего стандарта. Издание может использоваться как учебный курс для начинающих осваивать C++, так и удобный справочник для тех, кто хочет быстро найти …

Head First. Изучаем Ruby

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

Дизайн и эволюция языка С++

В книге, написанной создателем языка C++ Бьерном Страуструпом, представлено описание процесса проектирования и разработки языка программирования C++. Здесь изложены цели, принципы и практические ограничения, наложившие отпечаток на структуру и облик C++, обсужден дизайн недавно добавленных в язык …

Объектно-ориентированное программирование на PHP

Книга предоставляет наиболее полное описание объектно-ориентированных возможностей PHP. Предполагается, что читатель знаком с базовыми возможностями PHP, языком разметки HTML и приемами работы с СУБД MySQL. Даны основы объектно-ориентированного подхода: классы, специальные методы классов, инкапсул…

C++. Мастер-класс в задачах и примерах

Книга разбита на две основные части: задачи и решения. Рассматриваются базовые конструкции языка С++, тонкие моменты низкоуровневых операций, объектно-ориентированное программирование, разработка приложений при помощи стандартной библиотеки шаблонов STL, а также прикладные задачи. Особенностью пред…

Применение и реализация онтологий при разработке приложений баз данных

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

3 лучших книги по объектно-ориентированному программированию

Проектирование современной радиоэлектронной аппаратуры невозможно без применения средств автоматизированного проектирования. Для проектирования узлов печатных плат (ПП) широкое распространение получила система Р-CAD, достаточно длительное время успешно применяемая в организациях и на предприятиях России.

30.06.2013
Кирютенко Ю.А., Савельев В.А. — Объектно-ориентированное программирование. Язык Smalltalk

Аннотация: В учебном пособии обсуждаются базовые понятия объектной идеологии, их реализация и применение в языке Основу книги составили материалы курсов, читавшихся авторами в Ростовском государственном.

29.06.2013
Джо Мараско — The Software Development Edge: Essays on Managing Successful Projects / IT-проекты. Фронтовые очерки

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

29.05.2013
Андрій Будай — Дизайн патерни – просто, як двері

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

19.05.2011
Эрик Эванс — Предметно-ориентированное проектирование

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

16.07.2007
М.Ю. Катаев: Объектно-Ориентированное Программирование

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

19.04.2007
Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес: Приемы ООП. Паттерны проектирования

В предлагаемой электронной книге описываются простые и изящные решения типичных задач, возникающих в объектно-ориентированном проектировании. Паттерны.

Добавить комментарий