Общая классификация языков
а) Процедурные
б) Модульные
в) Объектно-ориентированные
Поясните, пжалста, их основные отличия и приведите примеры языков, ориентированных на тот или иной стиль.
а) Процедурные
б) Модульные
в) Объектно-ориентированные
Поясните, пжалста, их основные отличия и приведите примеры языков, ориентированных на тот или иной стиль.
Первые языки высокого уровня были процедурными. Характерные примеры - Фортран, Алгол. Основой процедурного стиля программирования было вынесение необходимых алгоритмов в отдельные процедуры (или функции). При работе программы эти процедуры вызывались с тем или иным набором данных и возвращали результат.
Когда процедурный стиль программирования утвердился, стало ясно, что надо заняться данными. Процедурные языки предлагали весьма ограниченный набор встроенных типов данных (характерный набор - целые, вещественные, логические, символьные) и довольно бедные средства для создания сложных типов на основе встроенных (массивы). Поэтому следующим шагом было создание языков с развитыми структурами данных. Очень хороший пример такого языка - Паскаль Вирта. О том, насколько назрела потребность в подобных языках, говорит история Паскаля. Изначально написанный как язык для обучения студентов программированию, он очень быстро завоевал популярность у программистов во всем мире.
Однако со временем мир вырос и из языков с развитыми типами данных. По мере роста программ все актуальнее становилось "сокрытие" информации. В самом деле, зачем программисту знать, как именно называется, скажем, временный массив, используемый для перемножения матриц. Ему достаточно знать название процедуры и ее параметры - другими словами, интерфейс модуля. А ненужные детали только мешают работать. И вот появился "модульный" стиль программирования и языки, его поддерживающие (характерные примеры - Модула, ранние версии Турбо-паскаля).
Теперь несколько слов о С. Этот язык появился в 70х, одновременно с операционной системой UNIX. Его создателям нужен был мощный и эффективный язык для системного программирования, который к тому же был бы хорошо переносим. Именно на нем написан код ОС UNIX и ее многочисленных клонов. Язык оказался весьма удачным.
Это безусловно язык высокого уровня, и программистам на нем легко работать, но при этом он не жертвует эффективностью - по скорости выполнения программ его, пожалуй, можно сравнивать только с ассемблерами. К тому же это хорошо переносимый язык (как и сама система UNIX). Трансляторы С есть практически на любых архитекутрах, причем программы, написанные на этом языке, с успехом работают при переходе с одного типа компьютера на другой. Есть даже кросс-трансляторы, которые позволяют на одном типе компьютера подготовить программу для другого. С поддерживает и процедурный, и модульный стили программирования, а его возможности по части создания составных типов данных хотя и не очень широки, но вполне достаточны для рещения любой задачи. Поэтому (а также потому, что это "рабочий" язык весьма популярной сейчас системы UNIX), за 30 лет он не только не устарел, но наоборот набирает популярность.
Программист, использующий какой-нибудь модуль, вполне может передать его процедуре данные, рассчитанные совсем на другой алгоритм. И результат, который он получит, вряд ли будет осмысленным.
Вот тут-то на сцену и выходит объектно ориентированный стиль. Его основная идея - сами данные лучше всего знают, какими алгоритмами себя обрабатывать. Другими словами, тип в языке перестает быть просто типом данных - он уже включает в себя и правильные алгоритмы, которые с этими данными умеют работать. И такой тип называется объектом, либо классом - в разных языках по разному. Отсюда и название - объектно-ориентированное программирование.
И на объектно-ориентированных языках жизнь тоже не остановилась.....
а) Процедурные
б) Модульные
в) Объектно-ориентированные
Главная особенность процедурных (имеперативных) языков программирования, равно как и модульных, заключается в том, что порграмма выполняется последовательно, пооператорно, "сверху вниз".
Суть объектно-ориентированной конуепции программирования, в общем-то в трух словах: инкапсуляция, наследование, полиморфизм.
Еще есть логическая парадигма программирования (язык - пролог), основанная на логике предикатов и функциональная (лисп, клин, хаскель, система математика) основанная на ламбда-исчислении.
http://en.wikipedia.org/wiki/Programming_paradigm
А еще есть реляционные/табличные языки типа SQL, Векторные языки, типа Фортрана. Есть парадигма основанная на теории множеств (Set-oriented) и язык SETL http://cs1.cs.nyu.edu/bacon/setl-doc.html
Похожая коллекционная парадигма (Collection oriented programming) языки J, K, и т.д.
Есть еще так называемое "генетическое программирование" со своими прибамбасами...
Что касается языка C, он "многопрофильный", т.е. хотя и в основе своей процедурный, но на нем и ООП пытаются делать с помощью указателя на void. Да и относится он скорее всего к языкам низкого уровня, если к ним вообще хоть что-то относится кроме ассемблера... Само ООП делится на классово-ориентированное, и прототипно-ориентированное, где можно видоизменять создаваемые объекты (Javascript, Self, LUA)...
Что касается языка C, он "многопрофильный", т.е. хотя и в основе своей процедурный, но на нем и ООП пытаются делать с помощью указателя на void. Да и относится он скорее всего к языкам низкого уровня, если к ним вообще хоть что-то относится кроме ассемблера...(Javascript, Self, LUA)...
Я бы сказал, что сюда можно еще отнести MSIL, хотя его не приходится рассматривать обычно как самостоятельный язык со всеми его нюансами.
Не спорю, не досмотрел, но все же - яваскрипт используется как самостоятельный язык. А насчет MSIL - мне кажется, его кроме как промежуточную часть шарпа не используют. Хотя, он отчасти похож на асм.