Раздел программирования ориентированный на разработку. Технология объектно-ориентированного программирования

Приложений. Языки веб-программирования - это соответственно языки , которые в основном предназначены для работы с интернет-технологиями. Языки веб-программирования делятся на две группы: клиентские и серверные .

Клиентские языки

Как следует из названия, клиентские языки обрабатываются на стороне пользователя, а если проще - программы на клиентском языке обрабатывает браузер . Отсюда следует и недостаток - обработка скрипта зависит от браузера пользователя, и пользователь имеет полномочия настроить свой браузер так, чтобы он вообще игнорировал скрипты. При этом, если браузер старый, он может не поддерживать тот или иной язык или версию языка, на которую опирался разработчик. С современными браузерами таких проблем возникать не должно, к тому же языки программирования не так уж часто кардинально обновляются (раз в несколько лет) и лучшие из них давно известны. Также код клиентского скрипта может посмотреть каждый, выбрав в меню «Вид» своего браузера вкладку «Исходный код» (или что-то в этом роде).

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

Самым распространенным из клиентских языков является Netscape совместно с компанией Sun Microsystems . Другой вариант клиентского языка это, например, VBScript .

Серверные языки

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

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

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


Wikimedia Foundation . 2010 .

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

Ладно. Введение это очень весело, но вы его все равно не читаете, так что кому интересно - добро пожаловать под кат!

Императивное программирование



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

Это были машинные коды, языки ассемблера и ранние высокоуровневые языки, вроде Fortran.

Ключевые моменты:

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

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

В более высокоуровневых (таких как Си) состояние - это только память, инструкции могут быть сложнее и вызывать выделение и освобождение памяти в процессе своей работы.

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

Основные понятия:

- Инструкция
- Состояние

Порожденные понятия:

- Присваивание
- Переход
- Память
- Указатель

Как основную:
- Языки ассемблера
- Fortran
- Algol
- Cobol
- Pascal
- C
- C++
- Ada
Как вспомогательную:
- Python
- Ruby
- Java
- C#
- PHP
- Haskell (через монады)

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

Структурное программирование



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

Основоположниками структурного программирования были такие знаменитые люди как Э. Дейкстра и Н. Вирт.

Языками-первопроходцами в этой парадигме были Fortran, Algol и B, позже их приемниками стали Pascal и C.

Ключевые моменты:

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

В структурном программировании мы по прежнему оперируем состоянием и инструкциями, однако вводится понятие составной инструкции (блока), инструкций ветвления и цикла.

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

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

Основные понятия:

- Блок
- Цикл
- Ветвление

Языки поддерживающие данную парадигму:

Как основную:
- C
- Pascal
- Basic
Как вспомогательную:
- C#
- Java
- Python
- Ruby
- JavaScript

Поддерживают частично:
- Некоторые макроассемблеры (через макросы)

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

Процедурное программирование



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

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

Этим понятием на этот раз была процедура.

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

Ключевые моменты:

Процедура - самостоятельный участок кода, который можно выполнить как одну инструкцию.

В современном программировании процедура может иметь несколько точек выхода (return в C-подобных языках), несколько точек входа (с помощью yield в Python или статических локальных переменных в C++), иметь аргументы, возвращать значение как результат своего выполнения, быть перегруженной по количеству или типу параметров и много чего еще.

Основные понятия:

- Процедура

Порожденные понятия:

- Вызов
- Аргументы
- Возврат
- Рекурсия
- Перегрузка

Языки поддерживающие данную парадигму:

Как основную:
- C
- C++
- Pascal
- Object Pascal
Как вспомогательную:
- C#
- Java
- Ruby
- Python
- JavaScript

Поддерживают частично:
- Ранний Basic

Стоит отметить, что несколько точек входа из всех этих языков поддерживаются только в Python.

Модульное программирование



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

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

Программа описанная в стиле модульного программирования - это набор модулей. Что внутри, классы, императивный код или чистые функции - не важно.

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

Ключевые моменты:

Модуль - это отдельная именованная сущность программы, которая объединяет в себе другие программные единицы, близкие по функциональности.

Например файл List.mod включающий в себя класс List
и функции для работы с ним - модуль.

Папка Geometry, содержащая модули Shape, Rectangle и Triangle - тоже модуль, хоть и некоторые языки разделяют понятие модуля и пакета (в таких языках пакет - набор модулей и/или набор других пакетов).

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

Основные понятия:

- Модуль
- Импортирование

Порожденные понятия:

- Пакет
- Инкапсуляция

Языки поддерживающие данную парадигму:

Как основную:
- Haskell
- Pascal
- Python
Как вспомогательную:
- Java
- C#
- ActionScript 3

Поддерживают частично:
- C/C++

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

Вместо заключения

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

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

Разделение функциональности для улучшения разбиения программы на модули.

1. Трассировка

2. Контрактное программирование, в частности проверка пред и пост условий

3. Обработка ошибок.

4. Реализация систем безопасности.

Динамические языки

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

Больше подходят для быстрой разработки приложений.

Phyton,PHP,Rudy,Javascript.

Операция склеивания строк – конкатенация.

[Объектно-ориентированные языки программирования ]

Объект – объединяет в себе поля данных (атрибуты) и методы (выполняемые объектом действия).

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

Наследование – Создание нового класса объектов путем добавления новых элементов (методов).

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

Типизация – позволяет устранить ошибки на момент компиляции.

Объекты, классы и методы могут быть полиморфными данными, следовательно гибкость и универсальность.

Сложность адекватной формализации объектной теории, следовательно трудность тестирования и верификации ПО.

С++, Ada, pascal, PHP.

Прототипное программирование

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

Язык описания интерфейсов

Похож на описание классов С++.

Язык спецификаций.

Логическое программирование

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

Программа – совокупность логических правил при высказывании.

Используется в экспертных системах и системах принятия решений.

Высокий уровень машинной независимости, возможность отката к предыдущей подцели при отрицательном результате анализа одного из вариантов.

Prolog,Oz,Frill.

Специфичность решаемых задач.



Нелинейность структуры программы.

Сложность эффективной реализации в системе реального времени.

Параллельное программирование

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

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

Часто применяют в системах реального времени.

Недостаток – высокие накладные расходы на разработку программ.

Язык сценариев (скриптовые)

Программа состоит из сценариев, последовательностей операций.

Скриптовые языки или языки сценариев пакетной обработки.

8. Унификация и хорновский клоз в логических языках программирования .

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

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

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



Унификация - При поиске решений для множеств ограничений мы используем идею, высказанную Хиндли (Hindley, 1969) и Милнером (Milner, 1978), кото- рая состоит в использовании унификации (unification) (Robinson, 1971) для проверки непустоты множества решений и, если это так, нахожде- ния «наилучшего» из его элементов в том смысле, что все остальные решения могут быть непосредственно получены из него.

Дизъюнкт Хорна (хорновский дизъюнкт, клоз Хорна) - дизъюнкция, в которой содержится не более одного положительного литерала.

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

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

Одним из наиболее важных аспектов программирования на Прологе является использование унификации (отождествления) и конкретизации переменных.

Пролог пытается отождествить термы при доказательстве, или согласовании, целевого утверждения. Например, в программе для согласования запроса?- человек(Х) целевое утверждение человек(X) может быть отождествлено с фактом служащий(Иван), в результате чего переменная Х станет конкретизированной: Х= Иван.

Хорновский клоз (Ноrn clause) - это формула, в которой с помощью конъюнкции («и») элементарных формул выводится одиночная элементарная формула:

(s=>t)<=(t = tl||t2)^(s=>tl)

Логическое программирование основано на том наблюдении, что, ограничивая формулы хорновскими клозами, мы получаем правильное соотношение между выразительностью и эффективностью вывода. Такие факты, как t => t, являются выводами, которые ниоткуда не следуют, т. е. они всегда истинны. Вывод также называется головой формулы, потому при записи в инверсной форме оно появляется в формуле первым.

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

“wor” => "Hello world"?

Машина вывода пытается сопоставить цель и вывод формулы. В данном случае соответствие устанавливается сразу же: "wor" соответствует переменной s, a "Hello world" - переменной t. Это определяет подстановку выражений (в данном случае констант) для переменных; подстановка применяется ко всем переменным в формуле:

"wor" => "Hello world" <= ("Hello world" = tl || t2) ^ ("wor" => tl)

Теперь мы должны показать, что:

("Hello world" = t1|| t2) ^ ("wor" => tl)

является истинным, и это ведет к новому соответствию образцов, а именно попытке установить соответствие "Hello world" с tl || t2. Здесь, конечно, может быть много соответствий, что приведет к поиску. Например, машина вывода может допускать, чтобы tl указывало на "Не", a t2 указывало на "llо world"; эти подстановки затем проводятся во всем вычислении.

9. Модель вычислений функциональных языков программирования .

10. Языки программирования низкого уровня .

Язык программирования низкого уровня - язык программирования, близкий к программированию непосредственно в машинных кодах используемого реального или виртуального (например, Java, Microsoft .NET) процессора. Для обозначения машинных команд обычно применяется мнемоническое обозначение. Это позволяет запоминать команды не в виде последовательности двоичных нулей и единиц, а в виде осмысленных сокращений слов человеческого языка (обычно английских).

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

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

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

Намечают три вида низкоуровневых языков

1 Машинный код

2 Мнемо код

3 Ассемблер, макроассемблер

Машина Кода программа представляется в виде последовательности чисел являющихся кодами команд процессора, адресами оперативной памяти, номерами регистров процессора и внешних устройств.

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

Ассемблеры от мнемо кодов отличаются обширным набором директив транслятора. В первую очередь директивами программ в виде логически законченных элементов.

Макроассемблеры является расширением ассемблера за счет включения макросредств.

11. Средства разработки графического интерфейса пользователя. Эргономические свойства человеко-машинного интерфейса .

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

Эргономичность - интегральный показатель степени выполнения эргономических требований;

Показатели качества деятельности оператора (время решения задачи, производительность, число ошибок, состояние здоровья и т.д.);

Надёжность деятельности оператора (своевременное и безошибочное выполнение функций);

Эффективность СЧМ;

Напряжённость и экстремальность деятельности и т.д.

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

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

Человеко-машинный интерфейс условно можно разделить на 3 подгруппы:

текстовый (командные строки) интерфейс;

смешанный (псевдографический) интерфейс

(Псевдографический интерфейс обособлен присутствием графических интерфейсных элементов, например, кнопки, индикаторы процесса выполнения, меню. Как пример можно привести известную программу FAR);

графический интерфейс

(это система средств для взаимодействия пользователя с компьютером, основанная на представлении всех доступных пользователю системных объектов и функций в виде графических компонентов экрана (окон, значков, меню, кнопок, списков и т.п.) К этому виду интерфейсов относятся такие системы как, Mac OS, Solaris, GNU/Linux, Microsoft Windows, NeXTSTEP

12. Процедурные языки программирования. Основные отличия от других типов языков .

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

К процедурным языкам относятся Basic, Cobol, Fortran, Pascal, C и Ada.

Преимущества:

Маленькие модули можно написать легко и быстро;

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

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

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

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

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

Примеры: паскаль, С, Бейсик, Ада, Фортран.

13. Обоснование выбора языка программирования .

Для реализации алгоритма в качестве основного был выбран язык программирования С++, который стал едва ли не стандартом для написания любых достаточно сложных программ.

Язык программирования служит двум связанным между собой целям: он дает программисту аппарат для задания действий, которые должны быть выполнены, и формирует концепции, которыми пользуется программист, размышляя о том, что делать. Первой цели идеально отвечает язык, который настолько «близок к машине», что всеми основными машинными аспектами можно легко и просто оперировать достаточно очевидным для программиста образом. С таким умыслом первоначально задумывался C. Второй цели идеально отвечает язык, который настолько «близок к решаемой задаче», чтобы концепции её решения можно было выражать прямо и коротко. С таким умыслом предварительно задумывались средства, добавленные к C для создания С++.

Главным образом выбор языка программирования зависит от

1. Решаемой задачи

2. Операционной системы

3. Возможностей языка программирования

4. Цена программного обеспечения

5. Обучение

6. Сопровождение

7.Удобство

8. Возможности и условия дальнейшего распространения готового продукта

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

Недостатки:

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

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

Не привычная для многих программистов объектная модель. Классы и наследование классов присутствует, но оно сильно отличается от привычной многим реализаций в языках программирования C++/C#/Java.

Достоинства:

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

Популярность JavaScript открывает перед программистом немалое количество готовых библиотек, которые позволяют значительно упростить написание кода и нивелировать несовершенства синтаксиса;

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

14. Перегрузка в языках программирования .

Перегрузка процедур и функций - возможность использования одноимённых подпрограмм: процедур или функций в языках программирования.

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

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

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

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

Перегружать операции имеет смысл только в том случае, если вновь вводимые операции аналогичны предопределенным.

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

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

Компилятор однозначно идентифицирует функцию по ее имени и набору аргументов. Для компилятора функция с одинаковыми именами, но различными параметрами аргументов – разные функции.

Int add_values(int a, int b)

{ return(a + b);}

Int add_values(int a, int b, int c)

{ return(a + b+c);}

Int add_values(float a, float b)

{ return(a + b);}

{cout<<”200+800=”<< add_values (200,800);

cout<<”100+200+800=”<< add_values (100,200,800);

cout<<”0.5+0.2=”<< add_values (0.5,0.2);}

Механизм реализации в языке :

Улучшает удобочитаемость программ/

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

Варианты решения:

1. Требовать однозначный проходящий вариант перегруженной функции.

2. Предоставить выбор компилятору. Выберется вариант, не приводящий к потере информации при преобразовании типов. Если существует более одного варианта – выдать ошибку.

Приоритет и ассоциативность – порядок выполнения и следование операторов.

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

Если они могут быть заданы программистом – это становится дополнительным источником ошибок.

Пример: операция a+b все нормально для чисел, но для строк важен порядок, т.к. это конкатенация и a+b!=b+a

15. Логические языки программирования. Основные положения и понятия. Отличия от других типов языков программирования .

Логические языки – все операции представлены в виде логических формул. В программе допустимы логические причинно следственные связи. Таким образом логические программы базируются на классической логике и применимы для систем логического вывода.

Преимущества

1) Высокий уровень машинной независимости

2) Возможность откатов (возвращение к предыдущей подцели, и отрицательного в результате анализа одного из вариантов в процессе поиска решения)

Недостатки

1) Специфичность класса решаемых задач.

2) Сложность эффективной реализации для принятия решения в реальном времени.

3) Нелинейность структуры программы.

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

Первым языком логического программирования был язык Planner, в котором была заложена возможность автоматического вывода результата из данных и заданных правил перебора вариантов (совокупность которых называлась планом). Planner использовался для того, чтобы понизить требования к вычислительным ресурсам (с помощью метода backtracking) и обеспечить возможность вывода фактов, без активного использования стека. Затем был разработан язык Prolog, который не требовал плана перебора вариантов и был, в этом смысле, упрощением языка Planner.

Логическая программа состоит из предикатов, представляющими собой функции, вырабатывающие логические значения – любой предикат содержит вычисления, которые могут быть либо истинными, либо ложными. При этом результаты вычисления предикат возвращает только если вычисления истинны. Предикаты состоят из правил (предложений), описывающих вычисления и соединенных между собой логическими операторами И/ИЛИ, при этом логическому И соответствует оператор запятая, а ИЛИ – оператор точка. Программы на языке Prolog могут содержать также переменные (их имена обязательно должны начинаться с большой буквы – этим они отличаются от других объектов), однако одним из базовых в логическом и функциональном программировании является принцип однократного присваивания, в соответствии с которым переменная может получить значение лишь один раз, все остальные попытки присваивания будут работать как проверка на равенство. Следствием принципа однократного присваивания является отсутствия циклических конструкций в Prolog – вместо них везде применяется рекурсия, что не снижает скорость работы программы, т.к. хвостовая рекурсия также эффективна, как и цикл.

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

· Задача программиста – описание логической модели предметной области в терминах объектов, их свойств и отношений между ними (без деталей): описание данных и логики их обработки ~ аналогия с ООП.

· Удобство описания отношений между объектами (реляционная модель).

· Компактность кода (обработка структурированных данных, лог. правила).

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

· Легкость понимания (описание отд. правил), отладки программ (trace).

· Легкость описания сложных структур данных (деревья, списки и т.п.).

· Эффективный метод вычислений – рекурсия.

· Отсутствие указателей, операторов присваивания и безусловного перехода.

· Множество областей для применения: автоматический перевод, обработка текстов, экспертные системы, САПР, Data-minig системы, автоматическое управление, СУБД, символьные вычисления.

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

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

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

Преимущества

1) Концептуальная близость к предметной области. Произвольные структуры и назначения.

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

3) Использование раннее разработанных библиотек объектов и методов, что снижает трудозатраты и временные затраты.

4) Объекты классы и методы могут быть полиморфными, что делает программное обеспечение более гибким и универсальным.

Недостаток

1) Сложность адекватной т.е. непротиворечивой, полной формализации объектной теории, рождает трудности тестирования и верификации созданного программного обеспечения.

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

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

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

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

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

Связь: OOA→OOP→OOD

На результатах OOA формируются модели, на которых основывается OOD, OOD в свою очередь создает фундамент для окончательной реализации системы с использованием методологии ООП.

ОО ЯП

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

1) Поддерживаются объекты, т.е. абстракции данных, имеющие интерфейс в виде именованных операций и собственные данные, с ограничением доступа к ним.

2) Объекты относятся к соответствующим типам (классам).

3) Типы (классы) могут наследовать атрибуты супер типов (суперклассов).

Преимущества объектной модели:

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

Повышает уровень унификации разработки и пригодность для повторного использования программ и проектов.

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

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

Ориентирована на человеческое восприятие мира.

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

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

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

· Локализация кода и данных улучшает наглядность и удобство сопровождения программного обеспечения.

· Инкапсуляция информации защищает наиболее критичные данные от несанкционированного доступа.

Недостатки:

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

17. Полиморфизм в объектно-ориентированном программировании. Виртуальные функции. Таблицы виртуальных функций .

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

Полиморфизм – Некоторые части (методы) родительского класса заменяются новыми реализующими специфические для данного потомка действия.

Полиморфизм – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

Полиморфизмом в ООП называется переопределение наследником функций-членов базового класса.

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

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

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

Виртуальные функции - применяются для реализации динамического полиморфизма

Чистая виртуальная функция – это функция-член, которая объявлена со спецификатором = 0 вместо тела:

Чистая виртуальная функция не имеет определения и не может быть непосредственно вызвана.

Чистая виртуальная функция применяется для создания абстрактных классов.

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

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

Механизм работы virtual

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

Количество элементов в массиве равно количеству виртуальных функций в массиве.

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

Помимо создания таблицы виртуальных функций, в базовом классе объявляется поле __vfptr – указатель на vtable. Этот указатель наследуется всеми производными классами. __vfptr указывает на vtable класса, которому принадлежит объект.

Если процессор видит, что метод виртуальный, то ищет в таблице нужную запись. Адрес таблицы он узнает через __vfptr.

Абстрактный класс

Абстрактный класс – такой, у которого есть хотя бы одна не переопределенная чистая виртуальная функция – член.

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

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

Виртуальный деструктор

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

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

Если этого не сделать, в программе будут утечки памяти.

Полиморфи́зм (от греч. πολὺ- - много, и μορφή - форма) в языках программирования - возможность объектов с одинаковой спецификацией иметь различную реализацию.

Возможность объектов с одинаковой спецификацией иметь различную реализацию.

Предполагает использование одного объекта языка, для выполнения различных действий.

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

Различают полиморфизм статический и динамический.[ В статическом полиморфизме множественные формы разрешаются на этапе компиляции.

1) Преобразование типов

2) Перегрузка

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

1. Вариантные/неограниченные записи. Одна переменная может иметь значения разных типов. (Вариантная запись – запись, состоящая из фиксированного числа полей, но позволяющая по-разному рассматривать области памяти, занимаемые полями. Предполагается, что в любой момент времени значимо только 1 из полей объединения, в отличие от обычных записей, где все поля существуют одновременно).

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

Таблица виртуальных функций – это одномерный массив указателей на функции. Количество элементов в массиве равно количеству виртуальных функций в классе.

Для реализации механизма виртуальности используются таблицы виртуальных функций . Каждый объект класса, имеющего виртуальные функции, содержит таблицу виртуальных функций, в которой хранятся адреса виртуальных функций, определённых для того класса, к которому реально принадлежит объект. Поскольку при создании объекта его тип известен, компилятор может определить адреса виртуальных функций этого класса и записать их в таблицу виртуальных функций.

При вызове виртуальной функции её адрес определяется не на этапе компиляции, а во время выполнения программы. Из таблицы виртуальных функций берётся элемент с определённым номером и вызывается функция, находящаяся по этому адресу. Таким образом, для вызова виртуальной функции требуется одна дополнительная операция выбора значения из таблицы виртуальных функций.

18. Структура языка программирования. Синтаксис и семантика языков программирования. Расширенная форма Бэкуса-Наура .

{Основные элементы языка программиро

Соглашение об использовании материалов сайта

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

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Подобные документы

    Вопросы программирования в Maple версий 6-11 и разработка приложений. Рассматривает эффективные приемы программирования и разработки приложений для многих разделов техники, математики, физики, для решения которых пакет не имеет стандартных средств.

    монография , добавлен 13.03.2008

    Объектно-ориентированный язык программирования: общая характеристика и свойства. Базовый и производный классы, конструкторы производного класса. Конструкторы и неопределенность при множественном наследовании. Роль наследования при разработке программ.

    курсовая работа , добавлен 23.12.2013

    Оформление технического задания на разработку программы или программного изделия для вычислительных машин и комплексов. Принципы объектно-ориентированного программирования в среде Delphi. Ознакомление на конкретных примерах с технологиями OLE и СОМ.

    отчет по практике , добавлен 04.02.2011

    Этапы создания программы. Транслятор как средство для преобразования текстов из одного языка в другой. Понятие языков программирования, основные моменты их истории. Некоторые операторы языка QBasic. Понятие переменной, ее наглядное представление.

    презентация , добавлен 16.06.2011

    Анализ принципа создания приложений для Linux. Состав стандартного проекта CLX, его иерархия классов, свойства, методы, отличия от VCL. Особенности кроссплатформенного программирования, а также дополнительные возможности кроссплатформенных приложений.

    курсовая работа , добавлен 25.12.2009

    C# как объектно-ориентированный язык программирования. Объектно-ориентированный анализ и проектирование системы на языке UML. Сущность программы "Учёт пациентов в регистратуре поликлиники", ее достоинства и недостатки, пошаговая инструкция пользователя.

    курсовая работа , добавлен 17.02.2013

    Исследование возможностей и областей использования языка программирования JavaScript. Сравнительный анализ языков программирования JavaScript и PHP. Разработка интерактивного Web-приложения на примере теста по теме "Программирование на языке Delphi".

    практическая работа , добавлен 04.02.2015


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

Принято выделять два этапа программирования: понимание задачи и планирование решения. Программисту приходится возвращаться назад в решении задачи и задавать дополнительные вопросы лицу, которое формулирует условие задачи.

Задача каждого программиста - создать хорошую программу, т.е. программу, которая:

А) надежна, т.е. зависит только от своих действий;

Б) универсальна, т.е. ее можно легко изменить, когда нужна переделка;

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

Г) удобочитаема, т.е. хорошо понимаема пользователем;

Д) эффективна, т.е. реализует наиболее эффективный способ решения задачи.

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


  1. ^ Области языков программирования. Научные приложения.
Первые цифровые компьютеры, появившиеся в 1940-х годах, использовались и фактически изобретались для научных целей. Обычно научные приложения имеют дело с простыми структурами данных и значительным количеством арифметических вычислений, выполняемых над числами с плавающей точкой. Наиболее часто употребляемыми структурами данных являются массивы и матрицы; из управляющих структур чаще других используются циклы со счетчиком и условные операторы. Первым языком, созданным для научных приложений, был язык FORTRAN. Язык ALGOL и большинство его потомков также предназначались для подобных целей. Однако для научных приложений особо важна эффективность, а ни один из созданных языков не оказался лучше языка FORTRAN. Также Matlab, R.

Требования: 1. Высокая скорость работы. 2. Поддержка различный математических типов 3. Векторные и матричные вычисления. 4. Большое кол-во математических функций.


  1. Области языков программирования. Коммерческие приложения.

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

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

Также RPG. Требования: 1. Поддержка обработки текста 2. Подд. Формирования отчётов 3. Точное описание числовых типов


  1. Области языков программирования. Искусственный интеллект.
Искусственный интеллект (ИИ) - обширная область применения компьютеров, отличающаяся использованием символьных, а не числовых вычислений. Под символьными вычислениями подразумевается манипулирование не с числами, а с символами. Кроме того, символьные вычисления удобнее производить с использованием связных списков данных, а не массивов. Символьные вычисления иногда требуют большей гибкости, чем другие области программирования. Например, в некоторых приложениях искусственного интеллекта очень удобно иметь возможность создавать и реализовывать фрагменты программы в процессе ее выполнения. Первым широко используемым языком программирования, созданным для применения в области искусственного интеллекта, был язык функционального программирования LISP, появившийся в 1959 году. Большинство программ в этой области были написаны именно на языке LISP или на одном из родственных языков. Однако в начале 1970-х годов возник альтернативный подход к решению этих задач - язык логического программирования Prolog (1997). Требования: 1. Неалгоритмический способ решения 2. Оперирование с символьными данными

  1. Области языков программирования. Системное программирование.
Операционные системы и все инструменты программной поддержки компьютерных систем называются системным программным обеспечением (system software). Оно используется практически повсеместно и, следовательно, должно эффективно функционировать. В связи с этим языки программирования, применяемые в этой области, должны обеспечивать быстрое выполнение программ. Более того, они должны иметь низкоуровневые свойства, позволяющие писать программы, осуществляющие взаимодействие с внешними устройствами. PL/S, BLISS- находящийся всего на один уровень выше языка ассемблера; Extended ALGOL. Некоторые характерные черты языка С способствуют его использованию в системном программировании. Он низкоуровневый, эффективно функционирует и не обременяет пользователя большим количеством ограничений. Тем не менее, некоторые считают язык С слишком опасным для использования в больших и важных системах программного обеспечения. Требование – скорость.

  1. ^ Области языков программирования. Языки сценариев.
Языки подготовки сценариев развивались постепенно в течение последних 25 лет. Программы на этих языках представляют собой исполняемые файлы, называемые сценариями, которые содержат перечень команд. Первым из таких языков был язык sh (сокр. от англ. shell - оболочка), первоначально состоявший из небольшого набора команд, интерпретируемых как вызовы системных подпрограмм, выполнявших служебные функции, например, управление файлами и их простую фильтрацию. Одни из наиболее мощных и широко известных языков подготовки сценариев - ksh, awk, tcl. Разработанный Ларри Уоллом (Larry Wall) язык Perl сначала представлял собой комбинацию языков sh и awk. После этого он получил значительное развитие и сейчас является мощным, хотя и несколько примитивным, языком программирования.

Требование: 1. Обработка текстовых данных 2. Широкая возможность интеграции программ.


  1. Области языков программирования. Web-программирование.
Веб-программирование - раздел программирования, ориентированный на разработку веб-приложений (программ, обеспечивающих функционирование динамических сайтов Всемирной паутины). Языки веб-программирования - это языки, которые в основном предназначены для работы с веб-технологиями. Языки веб-программирования можно условно разделить на две пересекающиеся группы: клиентские(JavaScript и VBScript)и серверные(PHP, SQL, Perl, JAVA).

Веб-программирование это:

Простой способ обновления и пополнения информации на сайте.

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

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

Инструмент для решения любых задач по расширению функциональности сайта.

Требования: безопасность и обработка текстовой информации.


  1. ^ Уровни языков программирования. Машинные языки (история возникновения, отличительные особенности, пример языков). Вычислительные машины, служат для одной цели - для переработки информации, которая в них поступает. Переработку информации машина может произвести только тогда, когда четко изложена задача - что машина должна делать, и точно дан метод ее решения - как машина должна поступать. Она требует однозначности, конкретности, точности. И задачи переводят с человеческого языка на машинный.
МАШИННЫЙ ЯЗЫК - язык программирования для представления программ в форме, допускающей их непосредственную реализацию аппаратными средствами конкретной ЭВМ. Программа на машинном языке представляет собой последовательность машинных команд. Символами машинного языка являются двоичные цифры (0,1). Машинный код можно рассматривать как примитивный язык программирования или как самый низкий уровень представления скомпилированных или ассемблированных компьютерных программ. Хотя вполне возможно создавать программы прямо в машинном коде, сейчас это делается редко в силу громоздкости кода. Эффективность решения различных задач на ЦВМ в значительной степени зависит от того, насколько М. я. приспособлен для реализации заданных алгоритмов.

Особенности:

Для каждого процессора свой машинный язык

Выполняется непосредственно машиной

Минимальная (плохая) читаемость кода

Программисты почти не используют

^ 9. Уровни языков программирования. Языки ассемблера(история возникновения, отличительные особенности, пример языков).

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

Чтобы упростить общение человека с компьютером, были разработаны языки программирования типа Ассемблер, в которых переменные величины стали изображаться символическими именами, а числовые коды операций были заменены на словесные обозначения, которые легче запомнить. Язык программирования приблизился к человеческому языку, но удалился от языка машинных команд. Поэтому чтобы компьютер мог работать на языке Ассемблера, понадобился транслятор – программа, переводящая текст программы на Ассемблере в эквивалентные машинные команды. Языки типа Ассемблер являются машино-ориентированными, потому что они настроены на структуру машинных команд конкретного компьютера. Разные компьютеры с разными типами процессоров имеют разный Ассемблер.Особенности:

Набор команд языков ассемблера соответствует набору команд процессора

Более удобен для восприятия и кодирования

Компилируются/транслируются в машинный код.

^ 10. Уровни языков программирования. Языки высокого уровня(история возникновения, отличительные особенности, пример языков).

Язык высокого уровня - язык программирования, понятия и структура которого удобны для восприятия человеком.

Языки высокого уровня отражают потребности программиста, но не возможности системы обработки данных. Программисты всеми силами пытались изобрести язык программирования, который по своей структуре будет схож с человеческим языком. Так появились языки программирования С, BASIC, Pascal, COBOL, FORTRAN и др. Эти языки обладали более простым кодом, поэтому создавать программы на них было легче и быстрее. Особенности:

Более понятны человеку

1 команда на языке высокого уровня – несколько машинных команд

Требуется перевести в машинный код

Проще писать сложную программу

11. Методы реализации программ. Компиляция (схема получения результата из исходного кода, преимущества и недостатки, сравнительная таблица).

Компиляция - трансляция программы, составленной на исходном языке высокого уровня, в эквивалентную программу на низкоуровневом языке, близком машинному коду (абсолютный код, объектный модуль, иногда на язык ассемблера). Язык, на котором представлена входная программа, называется исходным языком, а сама программа - исходным кодом. Выходной язык называется целевым языком или объектным кодом. Большинство компиляторов переводит программу с некоторого высокоуровневого языка программирования в машинный код, который может быть непосредственно выполнен процессором. Результат компиляции - исполнимый модуль - обладает максимальной возможной производительностью, однако привязан к определённой операционной системе и процессору (и не будет работать на других). Для каждой целевой машины (IBM, Apple, Sun и т. д.) и каждой операционной системы или семейства операционных систем, работающих на целевой машине, требуется написание своего компилятора.


Критерий

Компиляция

Смешанная реализация

Интерпретация

Скорость исполнения

наивысшая

средняя

низкая


плохая

отличная

отличная


низкое

среднее

высокое


неудобно

терпимо

очень удобно

Примеры

Pascal, c, c++

Java, VB

Python, VBA, PHP

12. Методы реализации программ. Интерпретация (схема получения результата из исходного кода, преимущества и недостатки, сравнительная таблица).

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

Алгоритм работы простого интерпретатора


  • прочитать инструкцию;

  • проанализировать инструкцию и определить соответствующие действия;

  • выполнить соответствующие действия;

  • если не достигнуто условие завершения программы, прочитать следующую инструкцию и перейти к пункту 2.

Критерий

Компиляция

Смешанная реализация

Интерпретация

Скорость исполнения

наивысшая

средняя

низкая

Переносимость (кросс-платформеность)

плохая

отличная

отличная

Использование ресурсов (оперативная память, жесткий диск)

низкое

среднее

высокое

Удобство разработки и сопровождения (поиск ошибок)

неудобно

терпимо

очень удобно

Примеры

Pascal, c, c++

Java, VB

Python, VBA, PHP

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

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


Критерий

Компиляция

Смешанная реализация

Интерпретация

Скорость исполнения

наивысшая

средняя

низкая

Переносимость (кросс-платформеность)

плохая

отличная

отличная

Использование ресурсов (оперативная память, жесткий диск)

низкое

среднее

высокое

Удобство разработки и сопровождения (поиск ошибок)

неудобно

терпимо

очень удобно

Примеры

Pascal, c, c++

Java, VB

Python, VBA, PHP

14. Методы реализации программ. Трансляция (схема получения результата из исходного кода, преимущества и недостатки, сравнительная таблица).

Траснляция – перевод текста программы с одного языка на другой.

1.Лексический анализ. На этом этапе последовательность символов исходного файла преобразуется в последовательность лексем.

2.Синтаксический (грамматический) анализ. Последовательность лексем преобразуется в дерево разбора.

3.Семантический анализ. Дерево разбора обрабатывается с целью установления его семантики (смысла) - например, привязка идентификаторов к их декларациям, типам, проверка совместимости, определение типов выражений и т. д. Результат обычно называется «промежуточным представлением/кодом», и может быть дополненным деревом разбора, новым деревом, абстрактным набором команд или чем-то ещё, удобным для дальнейшей обработки.

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

5.Генерация кода. Из промежуточного представления порождается код на целевом языке.

^ 15. Критерии качества программ:

Количественные:

1)Размер программы;

А) В исходном коде LOC(~30,50);

Б) В откомпилированном виде;

Потребляемые ресурсы;

Время выполнения;

Качественные:

Корректность (программа должна выполнять поставленную задачу);

Удобство;

Читабельность (Читаемость кода);

Сопровождение (расширяемость);

Переносимость;

Надежность;

16. Алгоритм:

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

Основные свойства алгоритмов следующие:

1. Понятность для исполнителя - исполнитель алгоритма должен понимать, как его выполнять. Иными словами, имея алгоритм и произвольный вариант исходных данных, исполнитель должен знать, как надо действовать для выполнения этого алгоритма.

2. Дискретность (прерывность, раздельность) - алгоpитм должен пpедставлять процесс решения задачи как последовательное выполнение пpостых (или pанее определённых) шагов (этапов).

3. Опpеделенность - каждое пpавило алгоpитма должно быть четким, однозначным и не оставлять места для пpоизвола. Благодаpя этому свойству выполнение алгоpитма носит механический хаpактеp и не тpебует никаких дополнительных указаний или сведений о pешаемой задаче.

4. Pезультативность (или конечность) состоит в том, что за конечное число шагов алгоpитм либо должен пpиводить к pешению задачи, либо после конечного числа шагов останавливаться из-за невозможности получить решение с выдачей соответствующего сообщения, либо неограниченно продолжаться в течение времени, отведенного для исполнения алгоритма, с выдачей промежуточных результатов.

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

^ 17. Способы записи алгоритма. Блок-схемы.

Графический способ представления алгоритмов является более компактным и наглядным по сравнению со словесным.

При графическом представлении алгоритм изображается в виде последовательности

Связанных между собой функциональных блоков, каждый из которых соответствует

Выполнению одного или нескольких действий.

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

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

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

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

^ 18. Способы записи алгоритма. Псевдокод.

Псевдокод представляет собой систему обозначений и правил, предназначенную для единообразной записи алгоритмов.

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

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

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

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

^ 19. Способы записи алгоритма. Сравнение различных подходов:

Графический способ представления алгоритмов является более компактным и наглядным по сравнению со псевдокодом. При графическом представлении алгоритм изображается в виде последовательности связанных между собой функциональных блоков. Графическое описание алгоритма, называется блок-схемой. Этот способ имеет ряд преимуществ благодаря наглядности, обеспечивающей, в частности, высокую «читаемость» алгоритма и явное отображение управления в нем. В блок-схеме каждому типу действий (вводу исходных данных, вычислению значений выражений, проверке условий, управлению повторением действий, окончанию обработки и т.п.) соответствует геометрическая фигура, представленная в виде блочного символа. Блочные символы соединяются линиями переходов, определяющими очередность выполнения действий. В таблице №1 приведены обозначения, наиболее часто используемые в блок-схемах. Сначала определим понятие блок-схемы. Блок-схема - это ориентированный граф, указывающий порядок исполнения команд алгоритма. Вершины такого графа могут быть одного из трех типов: функциональная вершина (F), имеющая один вход и один выход; предикатная вершина (Р), имеющая один вход и два выхода, в этом случае функция Р передает управление по одной из ветвей в зависимости от значения Р (t, т. е. true, означает «истина»,f, т. е. false, - «ложь»); объединяющая вершина (вершина «слияния») (U), обеспечивающая передачу управления от одного из двух входов к выходу. Иногда вместо t пишут «да» (либо знак «+»), вместо f - «нет» (либо знак «-»). Из данных элементарных блок-схем можно построить четыре блок-схемы, имеющих особое значение для практики алгоритмизации: композиция, или следование альтернатива, или ветвление; итерация, или цикл, с предусловием или постусловием. Блок-схема альтернатива может иметь и сокращенную форму, в которой отсутствует ветвь F2. Развитием блок-схемы типа альтернатива является блок-схема выбор.

Похожие статьи

  • Фоллаут 4 как отремонтировать силовую броню

    В Fallout 4 разработчики решили пойти немного иным путем чем в предыдущей игре серии — если ранее вам нужно было попотеть чтобы добыть силовую броню, то в новой части ее вам дадут почти с самого начала. И вот тут уже возникает куча...

  • Требования: Fallout: New Vegas, все DLC (Скорее всего)

    Бункер Оставшихся в Fallout New Vegas – это локация, которая используется Анклавом для дозаправки их винтокрылов, когда они совершают полеты на пустошах Мохаве. По факту, бункер Оставшихся представляет из себя небольшой форпост. Для...

  • Самый подробный гайд по перкам

    Обновленная механика перков в Fallout 76 основывается на специальных картах. Их возможно раздобыть в комплектах, которые содержать 5 рандомных карточек. Навыки представляют собой основу для модернизации своего героя. Часть из них позволяют...

  • Что такое сео и зачем оно нужно

    Задаются приведенными ниже вопросами, которые на самом деле являются не более чем мифами и заблуждениями: SEO-миф №1: Чем больше исходящих ссылок,тем лучше сайт ранжируется Исходящие ссылки на тематически близкие и не тематические сайты...

  • Что такое SEO оптимизация?

    SEO (Search Engine Optimization, поисковая оптимизация) – это всестороннее развитие и продвижение сайта для его выхода на первые позиции в результатах выдачи поисковых систем (SERPs) по выбранным запросам с целью увеличения посещаемости и...

  • Стратегия показ в блоке по минимальной цене

    Неприятный удар по интимному месту со стороны Украины (санкции, Карл) заставил Яндекс выжимать максимум из оставшегося минимума возможностей рекламодателей. Одна из «ответных» санкций ударила, как всегда, по своим – отменён показ в блоках...