Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Классификация языков и стилей программирования

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

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

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

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

Классификация языков и стилей программирования

 

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

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

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

По этому критерию можно выделить следующие уровни языков программирования:

· машинные;

· машинно-оpиентиpованные (ассемблеpы);

· машинно-независимые (языки высокого уровня).

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

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

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

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

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

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

Языки высокого уровня делятся на:

· алгоритмические (Basic, Pascal, C и др.), которые предназначены для однозначного описания алгоритмов;

· логические (Prolog, Lisp и др.), которые ориентированы не на разработку алгоритма решения задачи, а на систематическое и формализованное описание задачи с тем, чтобы решение следовало из составленного описания.

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

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

 

 

 
 

 

 


 

 

Рисунок 8.1 – Классификация языков программирования

 

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

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

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

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

Примеры процедурных языков программирования: Аda (язык общего назначения), Basic (версии начиная с Quick Basic до появления Visual Basic), Си, КОБОЛ, Фортран, Модула-2, Pascal.

Среди процедурных языков выделяют в свою очередь структурные и операционные языки. В структурных языках одним оператором записываются целые алгоритмические структуры: ветвления, циклы и т.д. В операционных языках для этого используются несколько операций. Широко распространены следующие структурные языки: Паскаль, Си, Ада. Среди операционных известны Фортран, Бейсик, Фокал.

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

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

Методология структурного программирования предложена в 70-х годах XX века Э. Дейкстрой, разработана и дополнена Н. Виртом.

В соответствии с данной методологией:

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

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

Перечислим некоторые достоинства структурного программирования:

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

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

3. Сильно упрощается процесс тестирования и отладки структурированных программ.

Непроцедурное (декларативное) программирование появилось в начале 70-х годов ХХ века, но стремительное его развитие началось в 80-е годы, когда был разработан японский проект создания ЭВМ пятого поколения, целью которого явилась подготовка почвы для создания интеллектуальных машин. К непроцедурному программированию относятся функциональные и логические языки.

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

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

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

Примером функционального языка является язык LISP (List Processing обработка списков). Он рассматривается специалистами как основной язык программирования систем искусственного интеллекта.

Логика и программирование долгое время были непересекающимися областями исследований. Только в 1973 впервые было опубликовано описание языка PROLOG(PROgramming in LOGic программирование в терминах логики). В логических языках программа вообще не описывает действий. Центральным понятием в логическом программировании является отношение. Программа представляет собой совокупность определений отношений между объектами и цели. Она задает данные и соотношения между ними. После этого системе можно задавать вопросы. Машина перебирает известные и заданные в программе данные и находит ответ на вопрос. Порядок перебора не описывается в программе, а неявно задается самим языком. В логическом программировании нужно только специфицировать факты, на которых алгоритм основывается, а не определять последовательность шагов, которые требуется выполнить. Логические программы отличаются принципиально низким быстродействием. Так как вычисления осуществляются методом проб и ошибок (посредством поиска с возвратами).

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

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

В качестве примеров языков логического программирования можно привести Prolog и Mercury.

В настоящее время для ПК существует около двух десятков реализации Prolog’а, некоторые из которых оформлены в виде интегрированных сред.

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

Объектно-ориентированное программирование (ООП) – вид программирования, в котором основными понятиями являются объект и класс.

Класс – это тип, описывающий устройство объектов: некоторое поведение и способ представления. Понятие «объект» подразумевает нечто, что обладает определённым поведением и способом представления. Говорят, что объект – это экземпляр класса.

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

Первым языком программирования, в котором были предложены принципы объектной ориентированности, была Симула. В момент своего появления (в 1967 году), этот язык программирования предложил поистине революционные идеи: объекты, классы, виртуальные методы и др. Большинство концепций были развиты Аланом Кэйем и Дэном Ингаллсом в языке Smalltalk. Именно он стал первым широко распространённым объектно-ориентированным языком программирования.

Часть языков (иногда называемых «чисто объектными») целиком построена вокруг объектных средств – в них любые данные (возможно, за небольшим числом исключений в виде встроенных скалярных типов данных) являются объектами, любой код – методом какого-либо класса, и невозможно написать программу, в которой не использовались бы объекты. Примеры подобных языков – C#, Smalltalk, Java, Ruby. Другие языки (иногда используется термин «гибридные») включают ООП-подсистему в исходно процедурный язык. В них существует возможность программировать, не обращаясь к объектным средствам. Классические примеры – C++ и Pascal.

Языки описания сценариев, такие как Perl, Python, Rexx, Tcl и языки оболочек UNIX, предполагают программирование, весьма отличающееся от характерного для языков системного уровня. Они предназначаются не для написания приложения с нуля, а для комбинирования компонентов, набор которых создается заранее при помощи других языков. Развитие и рост популярности Internet также способствовали распространению языков описания сценариев. Так, для написания сценариев широко употребляется язык Perl, а среди разработчиков Web-страниц популярен JavaScript.

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

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

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

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

Бейсик (Basic Beginner’s All-purpose Symbolic Instruction Code – это универсальный код символических инструкций для начинающих) – для начинающих программистов, приближен к разговорному английскому языку, поддерживает модульное и структурное программирование

Лого (Logo) – проблемно-ориентированный язык, используется в основном для целей обучения. Это диалоговый процедурный язык, имеет простой синтаксис.

GPSS (General Purpose Simulation System) — общецелевая система моделирования – ориентирован на моделирование систем с помощью событий. Применяется там, где результаты исследований выражаются в терминах времени ожидания, длины очереди, использование ресурсов. Используется для имитационного моделирования различных систем, в основном систем массового обслуживания.

Смолток (Smalltalk) – один из ранних объектно-ориентированных ЯП, основная конструкция – это объект и действия с ним, предназначен для нечисловых задач (при построении систем искусственного интеллекта).

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

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

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

 




<== предыдущая лекция | следующая лекция ==>
Последствия неполной или несвоевременной выплаты дивидендов | Основы машинного перевода.

Дата добавления: 2015-09-15; просмотров: 511. Нарушение авторских прав

codlug.info - Студопедия - 2014-2017 год . (0.198 сек.) русская версия | украинская версия