Программа осуществляющая перевод программ с алгоритмического языка в машинный код называется
Компилятор (англ. compiler — составитель, собиратель) читает всю программу целиком, делает ее перевод и создает законченный вариант программы на машинном языке, который затем и выполняется.
Компилятор обеспечивает преобразование программы с одного языка на другой. Команды исходного языка сильно отличаются по организации и мощности, нежели команды машинного языка. Бывают такие, в которых одна команда исходного языка транслируется в 7-10 машинных команд. Существуют даже такие, в которых в каждой команде может соответствовать более 100 машинных команд (например язык программирования Пролог). В исходных языках довольно часто используется строгая типизация данных, которая осуществляется через их предварительное описание. Программирование на таких языках может опираться не только на кодирование алгоритма, но и на тщательное обдумывание структур данных или классов. Весь процесс трансляции с таких языков программирования обычно называется компиляцией, а исходные языки обычно относятся к языкам высокого уровня.
Интерпретатор (англ. interpreter — истолкователь, устный переводчик) переводит и выполняет программу строка за строкой.В отличие от компилятора, интерпретатор не порождает на выходе программу на машинном языке. Распознав команду исходного языка, он тут же выполняет ее. Как в компиляторах, так и в интерпретаторах используются одинаковые методы анализа исходного текста программы. Но интерпретатор позволяет начать обработку данных после написания даже одной команды. Это делает процесс разработки и отладки программ более гибким. Кроме того, отсутствие выходного машинного кода позволяет не «захламлять» внешние устройства дополнительными файлами, а сам интерпретатор можно достаточно легко адаптировать к любым машинным архитектурам, разработав его только один раз на широко распространенном языке программирования. Поэтому, интерпретируемые языки, типа Java Script, VB Script, получили широкое распространение. Недостатком интерпретаторов является низкая скорость выполнения программ. Обычно интерпретируемые программы выполняются в 50-100 раз медленнее программ, написанных в машинных кодах.
Поскольку текст, записанный на языке программирования, непонятен компьютеру, то требуется перевести его на машинный код. Такой перевод программы с языка программирования на язык машинных кодов называется трансляцией, а выполняется она специальными программами – трансляторами.
В настоящее время трансляторы разделяются на три основные группы: ассемблеры, компиляторы и интерпретаторы.
Вместе с тем, язык ассемблера, кроме аналогов машинных команд, содержит множество дополнительных директив, облегчающих, в частности, управление ресурсами компьютера, написание повторяющихся фрагментов, построение многомодульных программ. Поэтому выразительность языка намного богаче, чем просто языка символического кодирования, что значительно повышает эффективность программирования.
Эмуляторы используются достаточно часто в самых различных целях. Например, при разработке новых вычислительных систем, сначала создается эмулятор, выполняющий программы, разрабатываемые для еще несуществующих компьютеров. Это позволяет оценить систему команд и наработать базовое программное обеспечение еще до того, как будет создано соответствующее оборудование.
Очень часто эмулятор используется для выполнения старых программ на новых вычислительных машинах. Обычно новые компьютеры обладают более высоким быстродействием и имеют более качественное периферийное оборудование. Это позволяет эмулировать старые программы более эффективно по сравнению с их выполнением на старых компьютерах.
Макропроцессоры используются и с языками высокого уровня. Они увеличивают функциональные возможности таких языков как PL/1, C, C++. Особенно широко макропроцессоры применяются в C и C++, позволяя упростить написание программ. Макропроцессоры повышают эффективность программирования без изменения синтаксиса и семантики языка.
Любой транслятор выполняет следующие основные задачи:
- анализирует транслируемую программу, в частности определяет, содержит ли она синтаксические ошибки;
— генерирует выходную программу (ее часто называют объектной) на языке машинных команд;
Программа осуществляющая перевод программ с алгоритмического языка в машинный код называется
Программное обеспечение ЭВМ. Система программирования: основные функции и компоненты. Структура и синтаксис программы, арифметические операции и математические функции языка Паскаль.
Современный компьютер представляет собой двуединую систему, состоящую из аппаратной части (технических устройств) и информационной части (программного обеспечения). ПО – это совокупность программ, хранящихся на устройствах долговременной памяти компьютера и предназначенных для массового использования. Существует классификация ПО, согласно которой все программы делятся на системные, прикладные и системы программирования.
SHAPE \* MERGEFORMAT
Прикладное ПО – это программы, которые позволяют решать задачи пользователя. К прикладному ПО относят инструментальные программные средства общего назначения (текстовые редакторы, графические редакторы, СУБД, табличные процессоры и др.), инструментальные программные средства специального назначения (экспертные системы, системы мультимедиа, гипертекстовые системы и др.) и программные средства профессионального уровня, ориентированные на достаточно узкую предметную область (АСНИ – автоматизированные системы научных исследований, САПР – системы автоматизированного проектирования, АСУ – автоматизированные системы управления и др.).
Системное ПО – это программы, предназначенные для обслуживания самого компьютера и управления работой его устройств. Системное ПО состоит из операционной системы и сервисных программ. Операционная система дополняет аппаратные средства компьютера, позволяя прикладным программам обращаться к внешним устройствам, а пользователю управлять работой машины с помощью соответствующих команд. Сервисные программы служат следующим целям: с их помощью производится начальная разметка дисков, установка параметров внешних устройств, тестирование оперативной памяти и др. аппаратуры, выдача информации на печать, стыковка с другой машиной или локальной сетью и др.
Системы программирования – это комплекс инструментальных программных средств, предназначенный для работы с программами на одном из языков программирования. Системы программирования предоставляют сервисные возможности программистам для разработки их собственных компьютерных программ. Разработку средств системного ПО и систем программирования принято называть системным программированием; разработку прикладных программ называют прикладным программированием.
Разработка любого системного и прикладного ПО осуществляется с помощью систем программирования, в состав которых входят:
§ трансляторы с языков высокого уровня;
§ средства редактирования, компоновки и загрузки программ;
Транслятор – это комплекс программ, обеспечивающий перевод программы, написанной на символическом языке, в совокупность машинных кодов. В зависимости от функционального назначения выделяют два основных вида трансляторов: компилятор и интерпретатор.
Компилятор – это транслятор, обеспечивающий перевод программы с алгоритмического языка на машинный без ее выполнения.
Интерпретатор – это транслятор, обеспечивающий перевод каждой конструкции алгоритмического языка в машинный код с одновременным исполнением.
Отладчики – это специальные программы, предназначенные для трассировки (отслеживания выполнения программы в пооператорном варианте), идентификации места и вида ошибок в программе, «наблюдения» за изменением значений переменных, выражений и т.д.
Системы программирования, как правило, включают в себя:
§ текстовый редактор ( Edit ), осуществляющий функции записи и редактирования исходного текста программы;
§ загрузчик программы ( Load ), позволяющий выбрать из директории нужный текстовый файл программы;
§ запускатель программ ( Run ), осуществляющий процесс выполнения программы;
§ диспетчер файлов ( File ), предоставляющий возможность выполнять операции с файлами: сохранение, поиск, уничтожение и т.п.
Ядро системы программирования составляет язык. Язык программирования – формализованный язык для описания алгоритма решения задачи на компьютере.
Существующие языки программирования можно разделить на две группы:
Процедурные (или алгоритмические) программы представляют собой систему предписаний для решения конкретной задачи. Роль компьютера сводится к механическому выполнению этих предписаний.
Языки низкого уровня (машинно-ориентированные) позволяют создавать программы из машинных кодов. С ними трудно работать, но созданные с их помощью программы занимают меньше места в памяти и работают быстрее (н-р, языки Автокоды, Ассемблеры).
Программы на языках высокого уровня близки к естественному (английскому) языку и представляют набор заданных команд.
ЯП высокого уровня имеют следующие достоинства:
— алфавит языка значительно шире машинного, это делает его гораздо более выразительным;
— конструкции команд отражают содержательные виды обработки данных и задаются в удобном для человека виде;
— используется аппарат переменных и действия с ними;
— поддерживается широкий набор типов данных.
Классами декларативных языков являются функциональные языки (н-р, Lisp ) и логические языки (н-р, Prolog ).
Структура и синтаксис программы, арифметические операции и математические функции языка Паскаль
Каждый ЯП имеет алфавит, словарный запас, грамматику, синтаксис.
Алфавит – фиксированный для данного языка набор основных символов, допускаемых для составления текста программы на этом языке.
Синтаксис – система правил, определяющих допустимые конструкции ЯП из букв алфавита.
1. Символы, используемые в идентификаторах.
3. Специальные символы.
4. Неиспользуемые символы.
Разделители используются для отделения друг от друга идентификаторов, чисел, зарезервированных слов. В качестве разделителя можно использовать, например, пробел, « Enter ». В любом месте программы, где можно поместить один разделитель, можно поместить их любое количество и в любом сочетании. Это позволяет сделать программу удобной и читабельной.
Специальные символы: знаки пунктуаций, знаки операций, зарезервированные слова.
[] – выделение индексов массивов, элементов множеств, размеров строки,
() – выделение выражений, списков параметров,
‘ («апостроф») – для выделения символа или строковой константы,
.. – разделение границ диапазона,
. – обозначение конца программы, отделение в вещественном числе целой части от дробной, отделение полей в записи.
Составные части программы:
1. Заголовок: PROGRAM имя >
4. Раздел операторов
Раздел описаний предназначен для объявления всех встречающихся в программе данных и их характеристик: имя, тип, возможные значения. Этот раздел в свою очередь содержит объявление меток, констант, типов, переменных, процедур и функций. Эти разделы должны располагаться в строго перечисленном порядке.
Постоянные величины (константы) чаще всего бываю числовыми или символьными. Значения символьных констант заключаются в апострофы. Постоянные величины описываются в разделе констант по схеме:
Const имя > = константа >
Переменные описываются в разделе описания переменных по схеме:
Описание перечисляемого типа выполняется в разделе типов по схеме:
В разделе операторов записывается последовательность действий, исполняемых оператором. Они разделяются между собой « ; ».
Ввод исходных данных с клавиатуры происходит по оператору
Трансля́тор — программа или техническое средство, выполняющее трансляцию программы. [1] [2]
Трансляция программы — преобразование программы, представленной на одном из языков программирования, в программу на другом языке и, в определённом смысле, равносильную первой. [1]
Транслятор обычно выполняет также диагностику ошибок, формирует словари идентификаторов, выдаёт для печати тексты программы и т. д. [1]
Язык, на котором представлена входная программа, называется исходным языком, а сама программа — исходным кодом. Выходной язык называется целевым языком или объектным кодом.
В общем случае понятие трансляции относится не только к языкам программирования, но и к другим языкам — как формальным компьютерным (вроде языков разметки типа HTML), так и естественным (русскому, английскому и т. п.). [3] [4]
Содержание
Виды трансляторов
Реализации
Цель трансляции — преобразовать текст с одного языка на другой, который понятен адресату текста. В случае программ-трансляторов, адресатом является техническое устройство (процессор) или программа-интерпретатор.
Язык процессоров (машинный код) обычно является низкоуровневым. Существуют платформы, использующие в качестве машинного язык высокого уровня (например, iAPX-432 [5] ), но они являются исключением из правила в силу сложности и дороговизны. Транслятор, который преобразует программы в машинный язык, принимаемый и исполняемый непосредственно процессором, называется компилятором. [6]
Процесс компиляции как правило состоит из нескольких этапов: лексического, синтаксического и семантического анализов, генерации промежуточного кода, оптимизации и генерации результирующего машинного кода. Помимо этого, программа как правило зависит от сервисов, предоставляемых операционной системой и сторонними библиотеками (например, файловый ввод-вывод или графический интерфейс), и машинный код программы необходимо связать с этими сервисами. Связывание со статическими библиотеками выполняется редактором связей или компоновщиком (который может представлять собой отдельную программу или быть частью компилятора), а с операционной системой и динамическими библиотеками связывание выполняется при начале исполнения программы загрузчиком.
Достоинство компилятора: программа компилируется один раз и при каждом выполнении не требуется дополнительных преобразований. Соответственно, не требуется наличие компилятора на целевой машине, для которой компилируется программа. Недостаток: отдельный этап компиляции замедляет написание и отладку и затрудняет исполнение небольших, несложных или разовых программ.
В случае, если исходный язык является языком ассемблера (низкоуровневым языком, близким к машинному языку), то компилятор такого языка называется ассемблером.
Другой метод реализации — когда программа исполняется с помощью интерпретатора вообще без трансляции. Интерпретатор программно моделирует машину, цикл выборки-исполнения которой работает с командами на языках высокого уровня, а не с машинными командами. Такое программное моделирование создаёт виртуальную машину, реализующую язык. Этот подход называется чистой интерпретацией. [6] Чистая интерпретация применяется как правило для языков с простой структурой (например, АПЛ или Лисп). Интерпретаторы командной строки обрабатывают команды в скриптах в UNIX или в пакетных файлах (.bat) в MS-DOS также как правило в режиме чистой интерпретации.
Достоинство чистого интерпретатора: отсутствие промежуточных действий для трансляции упрощает реализацию интерпретатора и делает его удобнее в использовании, в том числе в диалоговом режиме. Недостаток — интерпретатор должен быть в наличии на целевой машине, где должна исполняться программа. Также, как правило, имеется более или менее значительный проигрыш в скорости. А свойство чистого интерпретатора, что ошибки в интерпретируемой программе обнаруживаются только при попытке выполнения команды (или строки) с ошибкой, можно признать как недостатком, так и достоинством.
Существуют компромиссные между компиляцией и чистой интерпретацией варианты реализации языков программирования, когда интерпретатор перед исполнением программы транслирует её на промежуточный язык (например, в байт-код или p-код), более удобный для интерпретации (то есть речь идёт об интерпретаторе со встроенным транслятором). Такой метод называется смешанной реализацией. [6] Примером смешанной реализации языка может служить Perl. Этот подход сочетает как достоинства компилятора и интерпретатора (бо́льшая скорость исполнения и удобство использования), так и недостатки (для трансляции и хранения программы на промежуточном языке требуются дополнительные ресурсы; для исполнения программы на целевой машине должен быть представлен интерпретатор). Также, как и в случае компилятора, смешанная реализация требует, чтобы перед исполнением исходный код не содержал ошибок (лексических, синтаксических и семантических).
По мере увеличения ресурсов компьютеров и расширения гетерогенных сетей (в том числе Интернета), связывающих компьютеры разных типов и архитектур, выделился новый вид интерпретации, при котором исходный (или промежуточный) код компилируется в машинный код непосредственно во время исполнения, «на лету». Уже скомпилированные участки кода кэшируются, чтобы при повторном обращении к ним они сразу получали управление, без перекомпиляции. Этот подход получил название динамической компиляции.
Достоинством динамической компиляции является то, что скорость интерпретации программ становится сравнимой со скоростью исполнения программ в обычных компилируемых языках, при этом сама программа хранится и распространяется в единственном виде, независимом от целевых платформ. Недостатком является бо́льшая сложность реализации и бо́льшие требования к ресурсам, чем в случае простых компиляторов или чистых интерпретаторов.
Смешение понятий трансляции и интерпретации
Трансляция и интерпретация — разные процессы: трансляция занимается переводом программ с одного языка на другой, а интерпретация отвечает за исполнение программ. Однако, поскольку целью трансляции как правило является подготовка программы к интерпретации, то эти процессы обычно рассматриваются вместе. Например, языки программирования часто характеризуются как «компилируемые» или «интерпретируемые», в зависимости от того, преобладает при использовании языка компиляция или интерпретация. Причём практически все языки программирования низкого уровня и третьего поколения, вроде ассемблера, Си или Модулы-2, являются компилируемыми, а более высокоуровневые языки, вроде Python или SQL, — интерпретируемыми.
С другой стороны, существует взаимопроникновение процессов трансляции и интерпретации: интерпретаторы могут быть компилирующими (в том числе с динамической компиляцией), а в трансляторах может требоваться интерпретация для конструкций метапрограммирования (например, для макросов в языке ассемблера, условной компиляции в Си или шаблонов в C++).
Более того, один и тот же язык программирования может и транслироваться, и интерпретироваться, и в обоих случаях должны присутствовать общие этапы анализа и распознавания конструкций и директив исходного языка. Это относится и к программным реализациям, и к аппаратным — так, процессоры семейства x86 перед исполнением инструкций машинного языка выполняют их декодирование, выделяя в опкодах поля операндов (регистров, адресов памяти, непосредственных значений), разрядности и т. п., а в процессорах Pentium с архитектурой NetBurst тот же самый машинный код перед сохранением во внутреннем кэше дополнительно транслируется в последовательность микроопераций.
Примечания
Можно привести ряд других примеров, в которых архитектура разработанных серий вычислительных машин базировалась или сильно зависела от некоторой модели структуры программы. Так, серия GE/Honeywell Multics основывалась на семантической модели выполнения программ, написанных на языке ПЛ/1. В Burroughs (англ.) B5500, B6700 … B7800 прототипом послужила модель программы этапа выполнения, написанной на расширенном языке Алгол. …
Процессор i432, подобно этим ранним архитектурам, также базируется на семантической модели структуры программы. Однако, в отличие от своих предшественников, i432 не основывается на модели некоторого конкретного языка программирования. Вместо этого, основной целью разработчиков было обеспечение непосредственной поддержки на этапе выполнения как для абстрактных данных (то есть программирование с абстрактными типами данных), так и для доменно-ориентированных операционных систем. …
Язык Ада поддерживает объектно-базированное программирование, что и послужило причиной выбора его в качестве основного языка программирования для i432.
Программа осуществляющая перевод программ с алгоритмического языка в машинный код называется
Языки программирования это формальная знаковая система, предназначенная для описания алгоритмов в форме, которая удобна для исполнителя.
Классификация языков программирования
Языки низкого уровня
Языки высокого уровня
Машинно-ориентированные языки (машинные коды, Ассемблер)
Алгоритмические языки
Каждый язык программирования предназначен для решения определенного класса задач:
2. Системы программирования
Системы программирования – это комплексы программ и прочих средств, предназначенных для разработки и их эксплуатации на конкретном языке программирования для конкретного вида ЭВМ.
Система программирования включает:
текстовый редактор
программа-отладчик
транслятор (программа переводчик с конкретного алгоритмического языка на машинного ориентированный)
компоновщик (редактор связей)
программа, обеспечивающая запуск программы
текст программы, написанный на конкретном алгоритмическом языке.
отладка исходного текста программы (поиск и устранение ошибок)
программа на машинно-ориентированном языке
объединяются оттранслированные модули в единые загрузочные, готовые к выполнению
+ библиотека подпрограмм, + Help
Выделяют два вида трансляторов: интерпретатор и компилятор.
Интерпретатор переводит на язык машинных кодов поочередно каждый оператор исходной программы, проверяет правильность записи оператора и немедленно выполняет его. В отличие от интерпретатора компилятор осуществляет перевод на машинный язык всей исходной программы.
Преимуществом компиляторов по сравнению с интерпретаторами является быстродействие, а недостатком – громоздкость. Большинство современных компиляторов работают в режиме трансляции.
Например: Программы на Java выполняются в два этапа. Сначала исходный текст компилятором переводится на промежуточный аппаратно-независимый язык. В таком виде полуфабрикат программы (байт-код) хранится на интернет-сервере, откуда по запросу клиента пересылается ему по сети. У клиента байт-код исполняется специальным интерпретатором, этот интерпретатор называется виртуальной Java-машиной, он встроен во все современные браузеры.
Среда визуальной разработки — среда разработки программного обеспечения, в которой наиболее распространённые блоки программного кода представлены в виде графических объектов. Применяются для создания прикладных программ и любительского программирование.
3. Синтаксис и семантика
Каждый язык программирование обладает своими лексическими, синтаксическими и семантическими правилами, которые необходимо соблюдать при составлении компьютерной программы.
Синтаксис – описывает структуру программ как наборов символов (обычно говорят — безотносительно к содержанию).
Пример синтаксической ошибки: Употребление оператора цикла For без To или Next, или отсутствие знака равенства в приведенной на рисунке программе.
Синтаксису языка противопоставляется его семантика. Синтаксис языка описывает «чистый» язык, в то же время семантика приписывает значения (действия) различным синтаксическим конструкциям.
Семантика – определяет смысловое значение предложений алгоритмического языка.
Поиск этих ошибок происходит с помощью логического анализа работы программы и ее тестирования.
4.Классы языков программирования
Императивное
Декларативное
функциональное
логическое
Императивные языки программирования – Бейсик, Паскаль, Си и прочие (включая объектно-ориентированные).
Императивное программирование наиболее популярное. Характеризуются последовательным, пошаговым изменением состояния вычислителя. При этом управление изменениями полностью определено и полностью контролируемо.
Одна из характерных черт императивного программирования – наличие переменных с операцией «разрушающего присвоения». То есть, была переменная А, было у нее значение Х. Алгоритм предписывает на очередном шаге присвоить переменной А значение Y. То значение, которое было у А, будет «навсегда забыто».
Если задача описывается последовательным исполнением операций («открыть кран, набрать воды»), то такие задачи идеальные кандидаты на императивную реализацию.
Декларативные языки программирования:
Функциональные языки программирования – LISP, ISWIM (If you See What I Mean), ML (Meta Language), Miranda
В языках функционального программирования основными конструктивными элементами являются функции. Тексты программ на функциональных языках программирования описывают «как решить задачу», но не предписывают последовательность действий для решения.
Способ решения задачи описывается при помощи зависимости функций друг от друга (в том числе возможны рекурсивные зависимости) без указания последовательности шагов.
Функциональное программирование, как и другие модели «неимперативного» программирования, обычно применяется для решения задач, которые трудно сформулировать в терминах последовательных операций. Практически все задачи, связанные с искусственным интеллектом, попадают в эту категорию. Среди них следует отметить задачи распознавания образов, общение с пользователем на естественном языке, реализацию экспертных систем, автоматизированное доказательство теорем, символьные вычисления. Эти задачи далеки от традиционного прикладного программирования, поэтому им уделяется не так много внимания в учебных программах по информатике.
Логические языки программирования – Prolog.
Логическое программирование и язык Пролог появились в результате исследования группы французских ученых под руководством Колмерье в области анализа естественных языков. В последствии было обнаружено, что логическое программирование столь же эффективно в реализации других задач искусственного интеллекта, для чего оно в настоящий момент, главным образом, и используется. Но логическое программирование оказывается удобным и для реализации других сложных задач; например, диспетчерская система лондонского аэропорта Хитроу в настоящий момент переписывается на Прологе. Оказывается, логическое программирование является достаточно выразительным средством для описания сложных систем.
Программирование
Процедурное
Объектно-ориентированное
Процедурные языки программирования – используют процедуры (подпрограммы, методы или функции). Процедуры содержат последовательность шагов для выполнения. В ходе выполнения программы любая процедура может быть вызвана из любой точки.
Ада, Бейсик, Си, C++, С# (из Microsoft) КОБОЛ, Паскаль, Delphi, Фортран, Java, Перл, Visual Basic, PHP
При процедурном программировании программа разбивается на части в соответствии с алгоритмом: каждая часть (подпрограмма, функция, процедура) является составной частью алгоритма. При объектно-ориентированном программировании программа строится как совокупность взаимодействующих объектов.
Объект – это базовое понятие ООП. Любой объект принадлежит одному или нескольким классам, которые в свою очередь определяют, описывают поведение объекта.
Примеры классов: «Гном», «Хоббит», «Маг». Примеры объектов: «хоббит по имени Фродо Бэггинс», «маг по имени Гэндальф».
Каждый объект характеризуется свойствами, методами и событиями.
Свойства – описание объекта. Примеры атрибутов: «имя», «рост». Набор конкретных значений определяет текущее состояние объекта.
Метод – это действие объекта, изменяющее его состояние или реализующее другое его поведение. Пример методов: «назвать свое имя», «стать невидимым».
Объект, класс, метод, свойства, события – это базовые понятия ООП.
Рассмотрим ситуацию из обыденной жизни. Например, Вам надо сообщить поздравить своего родственника, живущего в другом городе с днем рождения. Для это Вы идете на почту и посылаете телеграмму. Вы сообщаете оператору, что хотите переслать данный текст по некоторому адресу. И Вы можете быть уверены, что ваше поздравление попадет по нужному адресу.
Итак, действие в ООП инициируется посредством передачи сообщений объекту, ответственному за действия. Сообщение содержит запрос на осуществление действия и сопровождается дополнительной информацией (аргументами), необходимой для его выполнения.
К концепции ООП относится:
Полиморфизм – это взаимозаменяемость объектов с одинаковым интерфейсом. Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество методов». В зависимости от типа объекта одно и то же сообщение может соответствовать различным действиям – методам для достижения требуемого результата.
Пример с почтой: Вы можете попросить своего товарища, летящего в город, где живут ваши родственники, поздравить их, и метод, который он изберет для решения этого запроса будет отличаться от того, который использовали на почте. Хотя родственники будут поздравлены. Если же Вы попросите коменданта общежития поздравить Ваших родственников, то у нее вероятно вообще не найдется метода для решения этой задачи, а если она и примет сообщение, то выдаст диагностическое сообщение об ошибке.
Пример наследования: на основании класса «Личность» создаются его подклассы «Хоббит», «Маг», «Эльф» и «Человек», каждый из которых обладает свойствами и поведением «Личности», но добавляет собственные свойства и меняет поведение.
Инкапсуляция — это принцип, согласно которому любой класс должен рассматриваться как чёрный ящик — пользователь класса должен видеть и использовать только интерфейс (от английского interface — внешнее лицо, т. е. список декларируемых свойств и методов) класса и не вникать в его внутреннюю реализацию. Этот принцип (теоретически) позволяет минимизировать число связей между классами и, соответственно, упростить независимую реализацию и модификацию классов. Свойство объекта скрывать некоторые свои свойства и методы. Смысл инкапсуляции состоит в том, что внешний пользователь не знает детали реализации объекта, работая с ним путём предоставленного объектом интерфейса.
Программирование
Неструктурное
Однако в языках высокого уровня наличие команды перехода влечет за собой массу серьезных недостатков: программа превращается в «спагетти» с бесконечными переходами вверх-вниз, ее очень трудно сопровождать и модифицировать. Фактически неструктурный стиль программирования не позволяет разрабатывать большие проекты. Ранее широко практиковавшееся первоначальное обучение программированию на базе неструктурного языка (обычно Бейсика) приводило к огромным трудностям при переходе на более современные стили. Как отмечал известный голландский ученый Э. Дейкстра, «программисты, изначально ориентированные на Бейсик, умственно оболванены без надежды на исцеление».
Структурное программирование
задача разбивается на большое число мелких подзадач, каждая из которых решается своей процедурой или функцией (декомпозиция задачи). При этом проектирование программы идет по принципу сверху вниз: сначала определяются необходимые для решения программы модули, их входы и выходы, а затем уже эти модули разрабатываются. Такой подход вместе с локальными именами переменных позволяет разрабатывать проект силами большого числа программистов.
как доказал Э. Дейкстра, любой алгоритм можно реализовать, используя лишь три управляющие конструкции: