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

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

Проектируемый сайт будет выполнен на языке разметки гипертекста HTML с применением каскадных таблиц стилей CSS, серверного языка программирования PHP и языка программирования JavaScript.

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

Проектируемый web-ресурс будет выполнен преимущественно на языках программирования PHP и JavaScript. PHP (англ. PHP: Hypertext Preprocessor - «PHP: препроцессор гипертекста»; первоначально Personal Home Page Tools - «Инструменты для создания персональных веб-страниц») - скриптовый языкпрограммирования общего назначения, интенсивно применяемый для разработки веб-приложений. В настоящее время поддерживается подавляющим большинством хостинг-провайдеров и является одним из лидеров среди языков программирования, применяющихся для создания динамических веб-сайтов. Основное преимущество PHP-скрипов это то, что они выполняются на стороне сервера и их невозможно увидеть в окне браузера или исходном коде страницы.

1.3 Выбор языка программирования

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

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

Серверные языки. Когда пользователь дает запрос на какую-либо страницу (переходит на неё по ссылке или вводит адрес в адресной строке своего браузера), то вызванная страница сначала обрабатывается на сервере, то есть выполняются все программы, связанные со страницей, и только потом возвращается к посетителю по сети в виде файла. Этот файл может иметь расширения: HTML, PHP, ASP, Perl, SSI, XML, DHTML, XHTML.

Работа программ уже полностью зависима от сервера, на котором расположен сайт, и от того, какая версия того или иного языка поддерживается. Список серверных языков программирования: PHP, Perl, Python, Ruby, Любой.NET язык программирования (технология ASP.NET), Java, Groovy.

Наиболее популярные языки веб-программирования представлены на рисунке 1.1

Рисунок 1.1 Наиболее популярные языки веб-программирования

PHP (Profeshional Hypertext Preprocessor)

Язык исполняемый на стороне веб-сервера, написанный на языке C++, поэтому содержит много общего. История PHP начинается с человека по имени Rasmus Lerdorf в 1995 году, когда он создаёт простую программу на Perl, которая представляет собой скрипт по подсчёту посещения его резюме. Завоевав большую популярность скрипт требовал своей доработки и тогда появляется первая версия PHP, написанная на С – PHP/FI (Personal Home Page / Forms Interpreter), это как бы модификация Perl для работы с формами. PHP/FI просуществовал до версии 2.0 (выпуск – 1997 г.). После этого на горизонте появились два студента Израильского университета: Andi Gutmans и Zeev Suraski, они начали детально изучать исходники (sources) языка PHP/FI и сочли его непригодным для создания больших проектов. Тогда они создали первую официальную (современную) версию PHP – PHP 3.0, вот он потомок PHP/FI. Тогда и появилось новое название PHP: Hypertext Preprocessor. Шёл 1998 год. Впоследствии появились новые задачи, с которыми 3.0 версия PHP не справлялась (достаточно посмотреть на количество новых функций, которые появились в PHP 4.0, без которых не представляется сегодня возможность эффективно работать с веб-приложениями). Разработчики начали усердно работать над ядром (kernel) PHP и вскоре появляется первая стабильная версия PHP – PHP 4.0 (сенсационная находка для веб-программистов, полностью переделанное ядро).

Perl (Practical Extraction and Report Language)

Язык Perl смело можно считать предком PHP. Действительно, при первом изучении языка в глаза бросается резкое сходство с PHP. Но это только в начале, т.к. разработчиков Perl не особо заботил вопрос об упрощении языка. В начале Perl разрабатывался для ОС семейства *nix. Отцом Perl считается Larry Wall, а разработал он язык, вначале как систему для отчётов в Unix в Usenet-конференциях в 1986 году. Пользователям понравилось, пользователи захотели больше возможностей, которыми Perl в то, время не обладал. Основная задача Perl – облегчение команд для shell, но т.к. мы обсуждаем создание веб-станиц, то мы будем говорить о применение Perl для создания веб-страниц. Вопрос же о том, какой язык выбрать: Perl или PHP настолько философский, как, к примеру, вопрос о возникновении человека на земле. Поэтому это сугубо индивидуально. Мне, например, нравятся оба языка, т.к. они по своему своеобразны, интересны, можно привести множество примеров но это уже выходит за рамки этой статьи.

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

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

ASP (Active Server Pages)

Технология от Microsoft, позволяющая легко разрабатывать приложения для World Wide Web. ASP работает на платформе операционных систем линии Windows NT и на веб-сервере IIS. ASP не является языком программирования - это лишь технология предварительной обработки, позволяющая подключать программные модули во время процесса формирования Web-страницы. Относительная популярность ASP основана на простоте используемых языков сценариев (VBScript или JScript) и возможности использования внешних COM-компонент.

Технология ASP получила своё развитие в виде ASP.NET - новой технологии создания веб-приложений, основанной на платформе Microsoft .NET.

Интерпретируемый язык высокого уровня для быстрого и удобного объектно-ориентированного программирования. Язык обладает независимой от операционной системы реализацией многопоточности, строгой динамической типизацией, «сборщиком мусора» и многими другими возможностями. Руби близок по особенностям синтаксиса к языкам Перл и Эйфель, по объектно-ориентированному подходу к Smalltalk. Также некоторые черты языка взяты из Python, Лисп, Dylan и CLU.

Кроссплатформенная реализация интерпретатора языка является полностью свободной, распространяется с открытыми исходными текстами, возможностью копирования и модификации. Последней является версия 1.8.5, вышедшая 28 августа 2006.

Ruby on Rails - объектно-ориентированный программный каркас для создания веб-приложений, написанный на языке программирования Ruby. Ruby on Rails предоставляет каркас модель-представление-контроллер (Model-View-Controller) для веб-приложений, а также обеспечивает их интеграцию с веб-сервером и сервером базы данных.

Ruby on Rails является открытым программным обеспечением и распространяется под лицензией MIT.

Java - объектно-ориентированный язык программирования, разрабатываемый компанией Sun Microsystems с 1991 года и официально выпущенный 23 мая 1995 года. Изначально новый язык программирования назывался Oak (James Gosling) и разрабатывался для бытовой электроники, но впоследствии был переименован в Java и стал использоваться для написания апплетов, приложений и серверного программного обеспечения.

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

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

Часто к недостаткам этого подхода относят то, что исполнение байт-кода виртуальной машиной может снижать производительность программ и алгоритмов, реализованных на языке Java. Данное утверждение справедливо для первых версий виртуальной машины Java, однако в последнее время оно практически потеряло актуальность. Этому способствовал ряд усовершенствований: применение технологии JITs (Just-In-Time compiler), позволяющей переводить байт-код в машинный код во время исполнения программы с возможностью сохранения версий класса в машинном коде, широкое использование native-кода в стандартных библиотеках, а также аппаратные средства, обеспечивающие ускоренную обработку байт-кода (например, технология Jazelle, поддерживаемая некоторыми процессорами фирмы ARM).

Внутри Java существуют 3 основных семейства технологий:

J2EE - Java Enterprise Editon, для создания программного обеспечения уровня предприятия;

J2SE - Java Standard Editon, для создания пользовательских приложений, в первую очередь - для настольных систем;

J2ME - Java Micro Edition, для использования в устройствах, ограниченных по вычислительной мощности, в том числе мобильных телефонах, PDA, встроенных системах

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

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

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



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

Это были машинные коды, языки ассемблера и ранние высокоуровневые языки, вроде 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. ^ Области языков программирования. Научные приложения.
Первые цифровые компьютеры, появившиеся в 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. Развитием блок-схемы типа альтернатива является блок-схема выбор.

08.02.2018, Чт, 10:42, Мск , Текст: Игорь Королев

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

Облачная система промышленного интернета

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

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

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

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

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

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

Среди направлений «Цифровой экономики» в сфере промышленного интернета
есть разработка российского объектно-ориентированного языка программирования с защитой данных

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

Киберфизическая система интеллектуального мониторинга энергоснабжения

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

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

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

Беспроводная сенсорная сеть

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

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

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

Защита информации на промышленных объектах

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

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

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

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

Промышленная база данных реального времени

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

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

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

Программная платформа повышения эффективности производства

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

«Будущий сервис позволит управляющим компаниями, ресурсоснабжающим организациям и участникам рынка ЖКХ без капитальных затрат в кратчайшие сроки организовать сбор, хранение и анализ данных с разнородных как по типу ресурса, так и по производителю, приборов учета энергоресурсов, что может экономить до 30% расходов на энергоресурсы», - говорится в документе.

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

Автоматизация снабжения строительных организаций

Также будет создана система автоматизации отдела снабжения строительных организаций. В рамках данного мероприятия будет произведена доработка модуля для отдела закупкой: индивидуальная настройка уведомлений, инструмент формирования отчетов, приемка ТМЦ с подгрузкой документов, модуль интеграции с «1С» оприходования ТМЦ.

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

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

Что такое ООП

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

  • инкапсуляция;
  • наследование;
  • полиморфизм.

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

Примеры объектно-ориентированных языков:

  1. Pascal. С выходом Delphi 7 на официальном уровне стал называться Delphi. Основная область использования Object Pascal - написание прикладного ПО.
  2. C++ широко используется для разработки программного обеспечения, является одним из самых популярных языков. Применяется для создания ОС, прикладных программ, драйверов устройств, приложений, серверов, игр.
  3. Java - транслируется в байт-код, обрабатывается виртуальной машиной Java. Преимуществом такого способа выполнения является независимость от операционной системой и оборудования. Существующие семейства: Standard Edition, Enterprise Edition, Micro Edition, Card.
  4. JavaScript применяется в качестве языка сценариев для web-страниц. Синтаксис во многом напоминает Си и Java. Является реализацией Ecmascript. Сам Ecmascript используется в качестве основы для построения других таких как JScript, ActionScript.
  5. Objective-C построен на основе языка Си, а сам код Си понятен компилятору Objective-C.
  6. Perl - высокоуровневый интерпретируемый динамический язык общего назначения. Имеет богатые возможности для работы с текстом, изначально разработан именно для манипуляций с текстом. Сейчас используется в системном администрировании, разработке, сетевом программировании, биоинформатике и т. д.
  7. PHP. Аббревиатура переводится как препроцессор гипертекста. Применяется для разработки веб-приложений, в частности серверной части. С его помощью можно создавать gui-приложения с помощью пакетов WinBinder.
  8. Python - язык общего назначения, ориентирован на повышение производительности разработчика и читаемость кода. Был разработан проект Cython, с помощью которого осуществляется трансляция программ, написанных на Python в код на языке Си.

Абстракция

Любая книга из рода “Объектно-ориентированное программирование для чайников” выделяет один из главных принципов - абстракцию. Идея состоит в разделении деталей или характеристик реализации программы на важные и неважные. Необходима для крупных проектов, позволяет работать на разных уровнях представления системы, не уточняя детали.

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

Известный афоризм Дэвида Уилера гласит: Все проблемы в информатике можно решить на другом уровне абстракции.

Наследование

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

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

Существует несколько типов наследования:

  • простое;
  • множественное.

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

Наследование выглядит так:

function draw() {

return "just animal";

function eat() {

return "the animal is eating";

class Cow extends Animal {

function draw() {

Return "something that looks like a cow";

Видим, что class Cow унаследовал все методы от class Animal. Теперь, если выполнить Cow.eat(), получаем "the animal is eating", соответственно, метод draw() изменен. Cow.draw() вернет “something that looks like a cow”, а Animal.draw() вернет “just animal”.

Инкапсуляция

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

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

function __construct($name) {

$this->name = $name;

function getName() {

return $this->name;

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

Полиморфизм

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

В примере выше находится таблица. Мы видим class CardDesk и class GraphicalObject. У обоих есть функция под названием draw(). Она выполняет разные действия, хотя имеет одно имя.

Ad hoc полиморфизм или специальный полиморфизм использует:

  • перегрузку функций, методов;
  • приведение типов.

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

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

«Один интерфейс — много реализаций» Бьерн Страуструп.

Класс

Класс - это такой тип данных, который состоит из единого набора полей и методов.

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

  • наследования;
  • ассоциации;
  • агрегации.

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

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

В Object Pascal описывается следующим образом:

ClassName = class(SuperClass)

{ использование элементов ограничивается только пределами модуля }

{ здесь указываются поля }

{ спецификатор доступа стал доступным с выходом Delphi 2007, обозначает то же, что и private }

{ элементы могут использоваться внутри ClassName или при наследовании }

{ элементы доступны всем, они отображаются в Object Inspector"e }

Здесь SuperClass - предок, от которого происходит наследование.

Для C++ создание выглядит так:

class MyClass: public Parent

MyClass(); // конструктор

~MyClass(); // деструктор

В этом примере Parent является предком, если таковой имеется. Спецификаторы private, public, protected обозначают то же самое, что в предыдущем примере на Паскале. Также мы видим конструктор, деструктор, доступные для любой части программы. У C++ все элементы по умолчанию являются private, соответственно, это можно не указывать.

Особенности реализации

В центре объектно-ориентированных языков - объект, он является частью класса. Он состоит из:

  • поля;
  • метода.

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

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

ООП-методологии

Существуют такие методологии:

  • Компонентно-ориентированное программирование;
  • Прототипное программирование;
  • Классоориентированное программирование.

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

В прототипном программировании нет понятия класса - наследование производится за счет клонирования существующего прототипа. Это основа объектно-ориентированных языков javascript и других диалектов ecmascript, а также lua или lo. Главные особенности:

  • потомки не должны сохранять структурное подобие прототипа (в отношении класс - экземпляр это происходит именно так);
  • при копировании прототипа все методы наследуются один в один.

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

Объектно-ориентированные языки

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

ООЯ обязательно содержит набор следующих элементов:

  • объявление классов с полями, методами;
  • расширение за счет наследования функций;
  • полиморфное поведение.

Кроме вышеперечисленного списка, могут быть добавлены дополнительные средства:

  • конструктор, деструктор, финализаторы;
  • свойства;
  • индексаторы;
  • модификаторы доступа.

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

ЯП поддерживают больше, чем одну парадигму. Например, PHP или JavaScript поддерживают функциональное, процедурное, объектно-ориентированное программирование. Java работает с пятью парадигмами: объектно-ориентированной, обобщенной, процедурной, аспектно-ориентированной, конкурентной. C# считается одним из самых успешных примеров мультипарадигмальности. Он поддерживает те же подходы, что Java, к этому списку добавляется еще рефлексивная парадигма. Такой ЯП, как Oz, разработан для того, чтобы объединить все понятия, традиционно связанные с различными программными парадигмами.