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

Создание языка искусственного интеллекта Пролог (PROLOG — PROgramming in LOGic, программирование в терминах логики) в 1973 г. французским ученым Аланом Кольмероэ открыло новую об­ласть − логическое или реляционное программирование.

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

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

 

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

Пионером данного направления явился язык Смолток (Smalltalk), первоначально предназначенный для реализаций функций машин­ной графики. Работа над языком началась в 1970 г. в исследователь­ской лаборатории XEROX (США), а закончилась в 1980 г. оконча­тельным вариантом интерпретатора Smalltalk-80. Данный язык оригинален тем, что его синтаксис очень компактен и базируется ис­ключительно на понятии объекта. В нем отсутствуют операторы или данные, все, что входит в Смолток, является объектами, а объекты общаются друг с другом исключительно с помощью сообщений. В настоящее время версия VisualAge for Smalltalk активно развивает­ся компанией IBM.

Основой объектно-ориентированного программирования (ООП) является понятие объект. Его сущность выражается формулой «объект = данные + процедуры». Каждый объект содержит некоторую структуру данных и доступные только ему процедуры (методы) обработки этих данных. Используя эту методологию, можно создать свой собственный абстрактный тип и отобразить проблемную область в эту созданную абстракцию вместо традиционного ее отображения в предопределенные управляющие структуры и структуры данных языка программирования. Объединение данных и свойственных им процедур обработки в одном объекте называется инкапсуляциейи присуще ООП.

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

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

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

К наиболее современным объектно-ориентированным языкам программирования относятся С++ и Java.

Язык С++ был разработан в начале 80-х гг. Бьярном Страуструпом в лаборатории Bell корпорации АТ&Т. Им была создана компак­тная компилирующая система, в основе которой лежал язык С, до­полненный элементами языков BCPL, Simula-67 и Алгол-68. Более ранние версии языка были известны как «С с классами». В июле 1983 г. С++ был впервые использован за пределами исследовательской груп­пы автора, однако тогда еще многие особенности языка не были придуманы. К 1990 г. была выпущена третья версия языка С++, стан­дартизированная американским государственным комитетом стан­дартов ANSI. В 1990 г. сотрудник корпорации Sun Д. Гослинг на ос­нове расширения С++ разработал объектно-ориентированный язык Oak, основным достоинством которого было обеспечение сетевого взаимодействия различных по типу устройств. Новая интегрируемая в Internet версия языка получила название Java. С января 1995 г. Java получает распространение в Internet.

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

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

Идеи ООП проникли во многие процедурные языки. Например, в состав интегрированной системы программирования Паскаль (корпорации Borland International), начиная с версии 5.5, входит специ­альная библиотека ООП Turbo Vision.

С середины 90-х гг. многие объектно-ориентированные языки реализуются как системы визуального программирования. Такие систе­мы имеют интерфейс, позволяющий при составлении текста про­граммы видеть те графические объекты, для которых она пишется. Отличительной особенностью этих систем является наличие в них среды разработки программ из готовых «строительных блоков», по­зволяющих создавать интерфейсную часть программного продукта в диалоговом режиме, практически без написания программных опе­раций. Система берет на себя значительную часть работы по управ­лению компьютером, что делает возможным в простых случаях об­ходиться без особых знаний о деталях ее работы. Она сама пишет значительную часть текста программы: описания объектов, заголов­ки процедур и многое другое. Программисту остается только вписать необходимые строчки, определяющие индивидуальное поведение программы, которые система не в состоянии предвидеть. Но даже в этих случаях система сама указывает место для размещения таких строк. К объектно-ориентированным системам визуального проектирования относятся: Visual Basic, Delphi, С++ Builder, Visual С++. Это системы программирования самого высокого уровня.

VBA (Visual Basic for Application) является общей языковой плат­формой для приложений Microsoft Office (Excel, Word, Power Point и др.). VBA соблюдает основной синтаксис и правила программирова­ния языков Бейсик-диалектов. VBA помогает довольно сильно рас­ширить возможности приложений за счет написания макросов − программ, предназначенных для автоматизации выполнения многих операций. VBA позволяет создавать объекты управления графичес­кого интерфейса пользователя, задавать и изменять свойства объек­тов, подключать к ним необходимый для конкретного случая про­граммный код. С помощью VBA можно производить интеграцию между различными программными продуктами. Программы на язы­ке VBA для приложений создаются двумя способами:

- в автоматичес­ком режиме как результат построения клавишной макрокоманды;

- путем написания программного кода.