Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

билет 1

.pdf
Скачиваний:
12
Добавлен:
12.04.2015
Размер:
910.57 Кб
Скачать

Билет 1

Вопрос 1

Понятие класса, понятие объекта, составляющие класса и объекта. Объявление нового класса. Элементы класса поля, методы и свойства.

-, или объектное

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

В ООП центральным является понятие класса.

Класс — это определение структуры и поведения объектов определенного типа (как шаблон или схема объектов для этого типа данных). Класс объединяет в себе данные и методы их обработки.

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

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

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

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

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

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

Составляющие класса

или (переменная-член, data member, class field, instance variable)

в объектно-ориентированном программировании — переменная, связанная с классом или объектом. Все данные объекта хранятся в его полях. Доступ к полям осуществляется по их имени. Обычно тип данных каждого поля задаётся в описании класса, членом которого является поле. Поля могут быть любого типа, в том числе – классами.

Особенности полей Могут быть объявлены поля различных типов, которым при создании объекта или в

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

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

Метод в объектно-ориентированном программировании — это функция или процедура, принадлежащая какому-то классу или объекту.

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

Различают простые методы и статические методы (методы класса):

простые методы имеют доступ к данным объекта (конкретного экземпляра данного класса),

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

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

В зависимости от того, какой уровень доступа предоставляет тот или иной метод, выделяют:

открытый (public) интерфейс — общий интерфейс для всех пользователей данного класса;

защищённый (protected) интерфейс — внутренний интерфейс для всех наследников данного класса;

закрытый (private) интерфейс — интерфейс, доступный только изнутри данного класса.

Особенности методов Как источник действий, объект использует набор методов, т.е. подпрограмм,

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

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

Свойства

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

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

Свойства объекта

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

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

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

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

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

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

(от греч. πολ- — много, и μορφή — форма) в языках программирования — возможность объектов с одинаковой спецификацией иметь различную реализацию.

Язык программирования поддерживает полиморфизм, если классы с одинаковой спецификацией могут иметь различную реализацию — например, реализация класса может быть изменена в процессе наследования[1].

Кратко смысл полиморфизма можно выразить фразой: «Один интерфейс, множество реализаций».

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

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

внешняя общность проявляется как эквивалентный набор методов с одинаковыми именами или совпадающими сигнатурами (именами методов, типами аргументов и их количеством); внутренняя общность — одинаковая функциональность методов. Её можно описать

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

Объявление нового класса (пример – в Delphi )

Каждый новый класс в Delphi должен быть объявлен. Для этого используется зарезервированное слово class. Объявление определяет функциональные возможности класса.

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

Классы должны быть объявлены на уровне программы или на уровне модуля и не могут быть объявлены внутри процедуры или функции.

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

Классами в Delphi называются специальные типы, которые содержат поля, методы и свойства. Как и любой другой тип, класс служит лишь образцом для создания конкретных экземпляров реализации, которые называются объектами. Пример описания класса:

type

 

TMyClass = class(TObject)

// тип класс с именем TMyClass

Field: Integer;

// содержит в себе поле данных Field

procedure PrintField;

// и метод PrintField

 

end;

 

var

 

MyClass: TMyClass;

//объявление переменной типа класс

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

наследование и полиморфизм.

Класс представляет собой единство трех сущностей – полей, методов и свойств. Их объединение в единое целое называется инкапсуляцией.

Любой класс может быть порожден от другого класса. Для этого при его описании указывается имя класса-родителя, например:

TChildClass = class(TParentClass)

В нашем примере класс TchildClass является потомком класса TParentClass.

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

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

Вопрос 2

Язык манипулирования данными

Манипулирование данными в реляционной модели

Для манипулирования данными в реляционной модели используются два формальных аппарата:

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

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

Отличаются два этих формальных аппарата уровнем процедурности.

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

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

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

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

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

Заметим, что крайне редко алгебра или исчисление принимаются в качестве полной основы какого-либо языка БД. Обычно (как, например, в случае языка SQL) язык основывается на некоторой смеси алгебраических и логических конструкций. Тем не

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

Операции реляционной алгебры

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

Реляционная алгебра

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

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

Основные и дополнительные операции реляционной алгебры

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

именно выборка (selection), проекция (projection), декартово произведение (cartesian product), объединение(union) и разность множеств (set difference), выполняют большинство действий по извлечению данных, которые могут представлять для нас интерес. На основании пяти основных операций можно также вынести дополнительные операции, такие какоперации

соединения (join), пересечения (intersection) и деления (division), которые могут быть выражены в терминах пяти основных операций.

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

называют бинарными операциями. В приведенных ниже определениях R и S — это два

отношения, определенные на атрибутах и соответственно.

Операция

Обозначение

Область применения

 

 

 

 

 

 

 

 

Определяет результирующее отношение, которое

 

Выборка

 

содержит только те кортежи (строки) из отношения R,

 

 

которые удовлетворяют заданному условию

 

 

 

 

 

 

(предикату)

 

 

 

 

 

 

 

Определяет новое отношение, содержащее

 

Проекция

 

вертикальное подмножество отношения R, создаваемое

 

 

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

 

 

 

 

 

 

и исключения из результата строк-дубликатов

 

 

 

 

 

 

 

Определяет новое отношение, которое включает все

 

 

 

кортежи, содержащиеся только в R, только в S,

 

Объединение

 

одновременно в R и S, причем все дубликаты кортежей

 

 

 

исключены. При этом отношения R и S должны быть

 

 

 

совместимыми по объединению

 

 

 

 

 

 

 

Разность двух отношений R и s состоит из кортежей,

 

Разность

 

которые имеются в отношении R. но отсутствуют в

 

 

отношении S. Причем отношения R и s должны быть

 

 

 

 

 

 

совместимыми по объединению

 

 

 

 

 

 

 

Определяет отношение, которое содержит кортежи,

 

Пересечение

 

присутствующие как в отношении R, так и в отношении

 

 

S. Отношения R и S должны быть совместимыми по

 

 

 

 

 

 

объединению

 

 

 

 

 

 

 

Определяет новое отношение, которое является

 

Декартово

 

результатом конкатенации (т.е. сцепления) каждого

 

произведение

 

кортежа из отношения R с каждым кортежем из

 

 

 

отношения S

 

 

 

 

 

 

 

Определяет отношение, которое содержит кортежи из

 

Тета-cоединение

 

декартова произведения отношений R и S,

 

 

 

удовлетворяющие предикату F

 

 

 

 

 

 

 

Определяет отношение, которое содержит кортежи из

 

Соединение по

 

декартова произведения отношений R и S,

 

эквивалентности

 

удовлетворяющие предикату F (предикат должен

 

 

 

предусматривать только сравнение на равенство)

 

 

 

 

 

Естественное

 

Естественным соединением называется соединение по

 

 

 

 

соединение

 

эквивалентности двух отношений R и S, выполненное

 

 

 

 

 

 

по всем общим атрибутам х, из результатов которого

 

 

 

 

 

 

 

исключается по одному экземпляру каждого общего

 

 

 

 

 

 

атрибута

 

 

 

 

 

 

 

Соединение, при котором кортежи отношения R, не

 

(Левое) внешнее

 

имеющие совпадающих значений в общих столбцах

 

соединение

 

отношения S, также включаются в результирующее

 

 

 

отношение

 

 

 

 

 

 

 

Определяет отношение, содержащее те кортежи

 

Полусоединение

 

отношения R, которые входят в соединение отношений

 

 

 

R и S

 

 

 

 

 

 

 

Определяет отношение, состоящее из множества

 

 

 

кортежей отношения R, которые определены на

 

Деление

 

атрибуте С, соответствующем комбинации всех

 

 

кортежей отношения S, где C — множество атрибутов,

 

 

 

 

 

 

имеющихся в отношении R, но отсутствующих в

 

 

 

отношении S

 

 

 

 

 

Язык манипулирования данными для реляционной модели

Введение в язык SQL

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

Назначение языка SQL

Любой язык работы с базами данных должен предоставлять пользователю следующие возможности:

создавать базы данных и таблицы с полным описанием их структуры;

выполнять основные операции манипулирования данными, такие как вставка, модификация и удаление данных из таблиц;

выполнять простые и сложные запросы.

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

использовать один и тот же синтаксис и структуру команд при переходе от одной СУБД к другой. Язык SQL удовлетворяет практически всем этим требованиям.

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

язык DDL (Data Definition Language), предназначенный для определения структур базы данных и управления доступом к данным;

язык DML (Data Manipulation Language), предназначенный для выборки и обновления данных.

До появления стандарта SQL3 язык SQL включал только команды определения и манипулирования данными; в нем отсутствовали какие-либо команды управления ходом вычислений. Другими словами, в этом языке не было команд IF ... THEN ... ELSE, GO TO, DO ... WHILE и любых других, предназначенных для управления ходом вычислительного процесса. Подобные задачи должны были решаться программным путем (с помощью языков программирования или управления заданиями) либо интерактивно (в результате действий, выполняемых самим пользователем). По причине подобной незавершенности (с точки зрения организации вычислительного процесса) язык SQL мог использоваться двумя способами. Первый предусматривал интерактивную работу, заключающуюся во вводе пользователем с терминала отдельных операторов SQL. Второй состоял во внедрении операторов SQL в программы на процедурных языках.

Язык SQL относительно прост в изучении.

Это непроцедурный язык, поэтому в нем необходимо указывать, какая информация должна быть получена, а не как ее можно получить. Иначе говоря, язык SQL не требует указания методов доступа к данным,

Как и большинство современных языков, SQL поддерживает свободный формат записи операторов. Это означает, что при вводе отдельные элементы операторов не связаны с фиксированными позициями на экране.

Структура команд задается набором ключевых слов, представляющих собой обычные слова английского языка, такие как CREATE TABLE (Создать таблицу), INSERT (Вставить), SELECT (Выбрать).

Например:

CREATE TABLE Staff (staffNo VARCHAR(S), IName VARCHAR(15), salary DECIMAL(7,2));

INSERT INTO Staff VALUES ('SG16', 'Brown', 8300);

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]