Главная страница

ИГА. Понятие базы данных


Скачать 0.77 Mb.
НазваниеПонятие базы данных
Дата05.04.2022
Размер0.77 Mb.
Формат файлаdocx
Имя файлаИГА.docx
ТипДокументы
#445246
страница18 из 37
1   ...   14   15   16   17   18   19   20   21   ...   37

Основные стандартные домены (Prolog).


Описания требуют только нестандартн. домены. Доменом в Prolog’е называют тип данных. В Prolog’е, как и др. языках прогр-ния, существует несколько стандартных доменов, перечислим их:

integer – целые числа ||| real – вещественные числа ||| string – строки (любая последовательность символов, заключенная в кавычки) ||| char – одиночный символ, заключенный в апострофы ||| symbol – последовательность латинских букв, цифр и символов подчеркивания, начинающаяся с маленькой буквы или любая последовательность символов, заключенная в кавычки.

Пример. программа, оформленную по всем правилам:

PREDICATES

bird (string)

has_wings (string)

can_fly (string)

can_swim (string)
CLAUSES

bird (“журавль”).

has_wings (“синица”).

has_wings (“пингвин”).

can_fly (“синица”).

can_swim (“пингвин”).

bird (Object):- has_wings (Object), can_fly (Object).
GOAL

bird (Who).

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

Основные принципы поиска с возвратом (Prolog).


Поиск с возвратом (backtracking) – это один из основн. приемов поиска решений поставленной задачи в Prolog’е. Поиск с возвратом можно сравнить с поиском выхода из лабиринта. Нужно войти в лабиринт и на каждой развилке сворачивать влево, до тех пор, пока не найдется выход или тупик. Если впереди оказался тупик, нужно вернуться к последн. развилке и свернуть направо, затем снова проверять все левые пути. В конце концов, выход (если он есть) будет найден. Подобн. образом работает и механизм поиска с возвратом. Благодаря механизму поиска с возвратом Prolog в состоянии находить все возможные решения, имеющиеся для данной задачи.

=========================================================================

Пример:

PREDICATES

little (symbol)

middle (symbol)

big (symbol)

strong (symbol)

powerful (symbol)

CLAUSES

little (cat).

middle (tiger).

big (elephant).

strong (tiger).

powerful (Animal):- middle (Animal), strong (Animal).

powerful (Animal):- big (Animal).

Итак, обратимся к программе с запросом – Goal: powerful (Animal). Проследим по шагам, каким образом будут находиться все возможные решения. Доказательство цели, сформулированной в запросе, начинается с последовательного просмотра всех предложений, имеющихся в тексте программы. В данном примере цель powerful (Animal) может быть сопоставлена с заголовком первого правила вывода, но при этом помечается, что в тексте программы имеется еще одно правило точно с таким же заголовком, то есть устанавливается первая точка возврата (*1) и т.д.

Т еперь можно сформулировать основные правила поиска с возвратом: 1) Цели должны быть доказаны по порядку, слева, направо; 2) Для доказательства некоторой цели предложения просматриваются в том порядке, в каком они появляются в тексте программы; 3) Для того, чтобы доказать головную цель правила, необходимо доказать цели в теле правила. Тело правила состоит, в свою очередь из целей, которые должны быть доказаны; 4) Цель считается доказанной, если с помощью соответствующих фактов доказаны все цели, находящиеся в листьевых вершинах дерева целей.

Для последнего правила следует пояснить, что называется деревом целей. Ход решения программы удобно представлять в виде дерева, которое называется деревом целей. Пример дерева целей для ранее рассмотренного приме-ра, для случая нахожде-ния первого решения Animal=tiger. В данном дереве целей две цели: middle (Animal) и strong (tiger), находящиеся в листьевых вершинах, и обе они доказаны.

Эволюция парадигм программирования. Основные идеи и принципы ООП.


В середине двадцатого века появились ламповые вычислительные машины, которые предопределили бурное развитие языков программирования. В то время компьютеры стоили гораздо дороже любой программы, написанной для них, поэтому они требовали исключительно эффективного кода. Вначале такой код разрабатывался вручную на языке Assembler, который был очень близок к машинному коду. В середине 50-х годов для фирмы IBM был создан первый язык программирования Fortran. Язык был создан под руководством Джона Бэкуса. Fortran был ориентирован на архитектуру IBM, поэтому позднее под руководством Питера Наура был создан язык Algol [3]. Эти языки положили начало истории развития языков программирования высокого уровня.

Высокоуровневые языки программирования частично упростили процесс создания новых программ, однако это создало новые проблемы. Упростив и ускорив программирование, расширив возможности вычислительных машин, созданные языки предопределили возникновение новых задач, которые ставились программистам. Постепенно реализация этих задач потребовала новых возможностей от языков программирования, поэтому последовало создание новых языков, например PL/I и Cobol [3].

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

Появление новых языков решало существующие проблемы, но создавало новые: требования к программным продуктам и сферы использования росли все быстрее, как и исходный код программ, становясь все более сложным для отладки, изменений и последующей поддержки. Таким образом, в сфере разработки программного обеспечения обозначился кризис: стремительный рост стоимости разработки новых продуктов. Чтобы упорядочить процесс разработки программ, теоретики программирования начали исследования с целью увести программирование с чисто эмпирического поля в более структурированное, таким образом, появились первые методологии программирования [7].

Среди первых методологий наиболее широкое распространение получило структурное программирование, которое предлагало особые правила разбиения исходного кода программы на относительно изолированные части для более эффективной работы с ними в силу их меньшего объема и функциональной ориентации [9]. Методология была предложена в 70-х годах ХХ века Эдскером Дейкстрой и позднее доработана Никлаусом Виртом. В структурном программировании сначала пишется основной код программы, в котором вместо каждого связного логического фрагмента кода вставляется вызов подпрограммы, выполняющий этот фрагмент. Вместо настоящих, работающих подпрограмм, в программу вставляются «заглушки» – процедуры, имитирующие вход и выход процедур нижнего уровня. Полученная программа проверяется и отлаживается. После проверки на правильность выполнения последовательности подпрограмм «заглушки» последовательно заменяются на рабочий код, при этом разработка каждой «заглушки» ведется тем же методом, что и основной программы. Разработка заканчивается тогда заканчиваются «заглушки» [9].

В 1976 году был предложен принцип модульного программирования. Согласно этому принципу любой фрагмент описания процесса оформляется как самостоятельный программный продукт, пригодный для использования в описаниях других процессов. Это значит, что каждый программный модуль программируется, компилируется и отлаживается отдельно от других модулей и тем самым является физически отделенным от них. При этом каждый программный модуль может включаться в состав других программ, если выполнены условия его использования. Таким образом, модульное программирование является средством борьбы со сложностью и дублированию кода в программировании. Роль модулей могут играть структуры данных, библиотеки функций, классы, сервисы и др. программные единицы, реализующие некоторую функциональность и предоставляющие интерфейс к ней [16].

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

  1. Все является объектом

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

  3. Объект имеет независимую память, которая состоит из других объектов

  4. Объект является представителем класса, выражающим общие свойства объектов

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

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

Исходя из вышеприведенных принципов, программа представляется набором объектов, которые обладают состоянием и поведением. Объекты взаимодействуют между собой посредством сообщений. Иерархия объектов выстраивается следующим образом: программа – объект, для выполнения своих функций она обращается к дочерним объектам, которые, в свою очередь, выполняют команду путем обращения к другим объектам программы. Устойчивость и управляемость системы обеспечивается за счет четкого разделения ответственности объектов, однозначного определения интерфейсов взаимодействия между объектами и полной изолированности внутренней структуры объекта от внешней среды
1   ...   14   15   16   17   18   19   20   21   ...   37


написать администратору сайта