ООП-термины…

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

ООП - технология создания сложного ПО, которая основана на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного типа(класса), а классы образуют иерархию с наследованием свойств.

Взаимодействие программных объектов в такой системе осуществляется путем передачи сообщений.

Основные принципы ООП:

  1. Абстрагирование – процесс выделения абстракций в предметной области задачи.

Абстракция – совокупность существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов и, таким образом, четко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа. Современный уровень абстракции предполагает объединение всех свойств абстракции (как касающихся состояния анализируемого объекта, так и определяющих его поведение) в единую программную единицу некий абстрактный тип (класс).

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

Необходимость ограничения доступа предполагает разграничение двух частей в описании абстракции:

Интерфейс – совокупность доступных извне элементов реализации абстракций (основные характеристики состояния и поведения);

Реализация – совокупность недоступных извне элементов реализации абстракции (внутренняя организация абстракции и механизмы реализации ее поведения).

Ограничение доступа в ООП позволяет разработчику:

- выполнять конструирование системы поэтапно, не отвлекаясь на особенности реализации используемых абстракций.

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

Инкапсуляция- сочетание объединения всех свойств предмета (составляющих его состояния и поведения) в единую абстракцию и ограничения доступа в реализации этих свойств.

  1. Модульность – принцип разработки программной системы, предполагающий реализацию её в виде отдельных частей (модулей). При выполнении декомпозиции системы на модули желательно объединять логически связанные части, по возможности обеспечивая сокращение количества внешних связей между модулями.
  2. Иерархия – ранжированная или упорядоченная система абстракций. Принцип иерархичности предполагает использование иерархий при разработке программных систем.

В ООП используются 2 вида иерархии:

Иерархия «целое/часть» - показывает, что некоторые абстракции включены в рассматриваемую абстракцию как её части, например, лампа, состоит из цоколя, нити накаливания и колбы. Этот вариант иерархии используется в процессе разбиения системы на разных этапах проектирования.

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

Один из важнейших механизмов ООП – наследование свойств в иерархии общее/частное.

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

  1. Типизация – ограничение, накладываемое на свойства объектов и препятствующее взаимозаменяемости абстракций различных типов (или сильно сужающее возможность такой замены). Использование принципа типизации обеспечивает:

- ранее обнаружение ошибок, связанных с недопустимыми операциями над программными объектами;

- упрощение документирования;

- возможность генерации более эффективного кода;

Тип может связываться с программным объектом статически (тип объекта определен на этапе компиляции – ранее связывание) и динамически (тип объекта определяется только во время выполнения программы – позднее связывание). Реализация позднего связывания в языке программирования позволяет создавать переменные – указатели на объекты, принадлежащие различным классам (полиморфные объекты), что существенно расширяет возможности языка.

  1. Параллелизм – свойство нескольких абстракций одновременно находиться в активном состоянии, т.е. выполнять некоторые операции.
  2. Устойчивость – свойство абстракции существовать во времени независимо от процесса, породившего данный программный объект, и/или в пространстве, перемещаясь из адресного пространства, в котором он был создан.

Различают:

- временные объекты, хранящие промежуточные результаты некоторых действий, например вычислений;

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

- глобальные объекты, существующие пока программа загружена в память;

- сохраняемые объекты, данные которых хранятся в файлах внешней памяти между сеансами работы программы.

+

Объектно-ориентированное программирование требует знания четырех вещей :( не факт)

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

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

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

(4) Очень трудно изучать классы, не имея возможности их “пощупать”. Только с приобретением мало-мальского опыта можно уверенно себя почувствовать при работе с использованием ООП. Как мы видели, усилия на освоение базовых концепций невелики, но вот в случае библиотек классов и их использования они могут быть очень существенными.

***

PS(пародия на Задорнова): Тихо! Тихо! Не время, не время. Тихо! Набрали воздух, набрали…ждём…ждём. Тишину! Тишину! Потерпите! Вот щас, тишина! Приготовились, готовы? Тихо! Я Вас умоляю. Тихо!

Михаил Владимирович, Михаииил…Владимирович…умоляю Вас, дети уже уснули, полдник у нас в 16.00, пусть отдохнут… — напуганно шептала Вера Николаевна, воспитательница д/с № 96 «Малыш».

PPS(возможно и был такой случай в театре):

Дуняша. Говорите.

Епиходов. Мне бы желательно с вами наедине…(вздыхает)

Дуняша(смущенно). Хорошо… только сначала принесите мне мою тальмочку…Она около шкапа…тут немножко сыро…

Епиходов. Хорошо-с принесу-с…Теперь я знаю, что мнеее…(поворачивается лицом к залу и громко) Да, Вы уже зае..ли лазерной указкой в лицо светить!!!(бросает тальмочку и уходит со сцены)

Да…и зайдите в Размышляешь? там появилась новая pdf версия за последний период

Blogus tags :

Опубликовано в Programming, Юмор. 1 комментарий »

Эдгар Дейкстра отвечает на вопросы студентов…

Алгоритм Дейкстры? Мне жаль, если Вы знаете только это об этом гуру информатики. В сети масса ресурсов о Дейкстре, поищите - он того стоит. Я же привожу часть ответов Дейкстры на вопросы студентов.

Перевод с англ. Олег Хачкинаев (Alf)
Ответы на вопросы студентов отделения программного обеспечения
[Восстановить примерные вопросы мы предлагаем читателю в качестве упражнения.]

• Красивые безделушки — не всегда усовершенствование, возьмите, к примеру, последовательность: Классная доска => Диапроектор => PowerPoint.
• Мне не следует тратить время на компьютер лишь потому, что я ученый-компьютерщик. [Медикам-исследователям вовсе не обязательно самим страдать от болезней, которые они изучают.]
• Это не задача информатики — продвигать «компьютеризацию», скажем, разрабатывая прожорливые приложения и тем самым создавая рынок для следующего поколения вычислительного оборудования. [Медикам-исследователям не следует изобретать новые болезни, чтобы создавать рынок для новых лекарственных средств.]
• Задача Университета — не предлагать то, что общество просит, а давать то, что обществу необходимо. [Те вещи, что общество просит, в основном хорошо понятны, и для них не нужен Университет; он же должен предлагать то, что никто больше предоставить не в состоянии.]
• На наше формирование большое влияние оказывают инструменты, которые мы используем, в частности, формализмы, которые мы используем, формируют наш образ мышления лучшим или худшим образом, и это значит, что мы должны быть чрезвычайно осторожны в выборе того, чему учить и чему учиться, потому что разучиться потом совершенно невозможно. [Много лет назад, когда мне нужен был новый ассистент, одним из требований было «Не иметь даже понятия о Фортране», а в высшей школе в Сибири запрещено преподавание Бейсика.]
• Программист должен уметь демонстрировать, что его программа обладает требуемыми свойствами. Если эта мысль приходит ему в голову слишком поздно, он наверняка не сможет справиться с этой задачей: только если он позволяет этой цели влиять на разработку, есть надежда, что он справится с ней. Окончательная проверка не обеспечивает этого влияния и по сути дела является телегой, запряженной впереди лошади. Но именно это и происходит в программных фирмах, в которых «программирование» и «контроль качества» осуществляют разные группы. [Вряд ли стоит говорить, что эти фирмы не дают никакой гарантии качества.]
• Необходимые приемы эффективного доказательства достаточно формальны, но до тех пор, пока программированием занимаются люди, не владеющие этими приемами, кризис программного обеспечения будет сохраняться и рассматриваться как неизлечимая болезнь. А вы знаете, что делают неизлечимые болезни: они приводят к появлению знахарей и шарлатанов, которые в данном случае принимают личину Гуру Программирования.
• Кое-кто из вас сомневается, что упомянутые ранее «приемы эффективного доказательства», столь изящные для маленьких программ, способны масштабироваться, я цитирую, «применимо к устрашающим размерам и явной сложности большинства программ». Что ж, приемы окажутся бесполезны, если вы попытаетесь использовать их для распутывания хаоса, созданного группой некомпетентных, неорганизованных программистов. Их сила проявляется в фазе конструирования, когда (i) они приводят к значительно более коротким исходным текстам, чем созданные без их помощи, и (ii) длина вывода программы растет не быстрее, чем линейно, с ростом самой программы. Наконец, программы, произведенные таким способом, получаются бесконечно лучшими, чем обычный программный хлам. Мы не должны забывать, что программисты живут в мире искусственно созданных сущностей, это отличает их от большинства других ученых. Программист не должен спрашивать, насколько применимы технологии надежного программирования. Он должен создать мир, в котором они применимы; это единственный путь обеспечить высокое качество разработки. «Возможности машины дают нам теперь достаточный простор для создания хаоса. Неограниченные возможности для запутывания всего на свете! Выработка строгой интеллектуальной дисциплины сохранять вещи достаточно простыми — это настоящий вызов в этой среде, как технический, так и образовательный».
• «Вернемся к нашему первоначальному вопросу: может ли наука о компьютерах спасти компьютерную промышленность? Мой ответ таков: если компьютерную промышленность вообще можно спасти, только наука о компьютерах способна сделать это. Но может пройти немало времени, пока компьютерная промышленность — в особенности компании, крепко стоящие на ногах, — согласятся с этой точкой зрения. Почти наверняка это потребует больше времени, чем тот ограниченный период, на который они строят свои будущие планы. Тем временем академический мир — который традиционно строит гораздо более далеко идущие планы, — не имеет выбора. Он вынужден совершенствовать лучшие навыки, которые может выработать информатика, и обучать им. Чем поддаваться внешнему давлению и распространять сегодняшние заблуждения, лучше прекратить эту деятельность вовсе». Но чтобы подчеркнуть, как много терпения нам понадобится, позвольте привести еще одну старую цитату (1988): «Слишком мало людей осознает, что высокие технологии, столь знаменитые сегодня, — это в основном математические технологии». (Выдержка из 2nd David-report, названного так в честь председателя комитета Dr. E.E. David Jr.)
• Нет, я боюсь, что Информатика страдает от популярности Интернета. Он привлекает все возрастающую — если не сказать сметающую все на своем пути — массу студентов с весьма слабыми научными склонностями, и при более близком знакомстве Интернет только укрепляет господствующую (и несколько вульгарную) одержимость скоростью и объемами.
• Да, я разделяю ваше беспокойство: вряд ли можно научиться хорошо программировать, пройдя соответствующий курс. Ситуация сходна с аналогичной в математике, где программа обучения ориентирована на математические результаты; как заниматься самой математикой — студент должен впитать самостоятельно, так сказать. Один из доводов в пользу манипуляции символами и вычислительных доказательств — им гораздо легче научить, чем словесно-графическим доказательствам. Широкое введение курсов подобной вычислительной методологии, впрочем, столкнется с непреодолимыми политическими проблемами.
• В программном бизнесе имеется множество предприятий, которым неясно, что наука может помочь им; им также неясно, что она должна попытаться сделать это.


и еще в Размышляешь? много цитат от Дейкстры.

…а музыка была: Snoop Dogg feat. Pharell Williams - Let’s Get Blown

зы: если кто-то не понимает зачем я вставляю …а музыка была, так это для того, чтоб вы слушали именно этот трек при прочтении поста, чтобы оказаться на одной волне с автором и прочувствовать всю литературную подоплеку конкретного рассказа…

Blogus tags :

del.icio.us Tags: ,

Tags:

Опубликовано в Programming. 5 Comments »