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

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

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

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

 

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

 

1. Что представляет компьютерная программа?

2. Что представляют языки программирования?

3. Дайте определение понятию синтаксис языка?

4. Что означает семантика?

5. В чем заключается суть функционального программирования ?

6. Что такое логическое программирование.

 

Лекция №12. Объектно-ориентированное программирование (ООП) (1 час)

 

Цель лекции: Дать понятие ООП; понятие объекта, инкапсуляций, класса,

экземпляра, наследования, полиморфизма, модульности. Языки программирования баз данных, основы структурированного программирования. Рассмотреть программирование на языке Паскаль: Структура простейшей программы на языке Паскаль; операторы языка: присваивания, ввода-вывода, безусловного перехода, условного перехода, массивы, организация ввода и вывода массивов.

 

Вопросы лекции:

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

2. Языки программирования баз данных

3. Основы структурного программирования

4. Программирование на языке Паскаль. Начальные сведения

5. Структура простейшей программы на языке Паскаль

6. Операторы языка

7. Оператор присваивания

8. Операторы ввода-вывода

9. Оператор безусловного перехода

10. Оператор условного перехода

11. Массивы

12. Организация ввода и вывода массивов

 

Содержание лекции:

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

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

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

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

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

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

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

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

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

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

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

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

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