Справочник от Автор24
Поделись лекцией за скидку на Автор24

Языки программирования

  • 👀 356 просмотров
  • 📌 301 загрузка
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Языки программирования» pdf
Языки программирования высокого уровня Синтаксис, формальные грамматики. Для представления алгоритмов, предназначенных для выполнения на ЭВМ, используются языки программирования (ЯП). Внешняя форма программы на ЯП устанавливается с помощью синтаксиса языка , который определяет формальный язык. Он определяется с помощью определенных грамматических правил, аналогичных алгоритму текстовых подстановок. Основой формального определения синтаксиса являются формальные грамматики. Синтаксис языка — это набор правил, определяющих допустимые конструкции языка. Синтаксис определяет «форму языка» — задает набор цепочек символов, которые принадлежат языку. Семантика языка — это раздел языка, определяющий значение предложений языка. Семантика определяет «содержание языка» — задает смысловое значение для всех допустимых цепочек языка. Грамматика — это описание способа построения предложений некоторого языка. Иными словами, грамматика — это математическая система, определяющая язык. Грамматику языка можно описать различными способами: например, грамматика русского языка описывается довольно сложным набором правил. Правило — это упорядоченная пара цепочек символов (α, β). В правилах очень важен порядок цепочек, поэтому их чаще записывают в виде α→β. Формально грамматика G определяется как четверка (N, T, P, S), где • N — конечное множество нетерминальных символов или нетерминалов; • T — конечное множество терминальных символов или терминалов, причем N∩T=∅; • P — конечное множество правил грамматики вида α→β, где (α , β) ∈ • ( N U T )* N ( N U T )* × ( N U T )* . S — символ из N, называемый начальным символом. Множество V = N∪T называют полным алфавитом грамматики G. Каждый символ множества N может встречаться в цепочках как левой, так и правой частей правил грамматики, но он обязан хотя бы один раз быть в левой части хотя бы одного правила. Правила грамматики строятся так, чтобы в левой части каждого правила был хотя бы один нетерминальный символ. Пример 1. Дана грамматика G =({A, S}, {0, 1}, P, S), где P = {S→0A1, 0A→00A1, A→e}. Нетерминальными символами являются A, S, а терминальными 0, 1. Грамматика определяет язык рекурсивным образом посредством задания особого рода выводимых цепочек. Выводимые образом: цепочки грамматики G = (N, T, P, S) определяются • S — выводимая цепочка; • Если αβγ — выводимая цепочка, и β→δ содержится в Р, то αδγ - тоже выводимая цепочка Выводимая цепочка грамматики G, не содержащая нетерминальных называется терминальной цепочкой, порождаемой грамматикой G. Язык, порождаемый грамматикой G цепочек, порождаемых грамматикой G. (L(G)) - это множество следующим символов, терминальных Пусть G = (N, T, P, S) — грамматика, V = N∪T — ее алфавит. α,β,γ ∈ V*, δ ∈ V+. Цепочка ϕ = αβγ называется непосредственно выводимой из ψ = αδγ в грамматике G, если в G существует правило δ→β ∈ P. Обозначается ψ ⇒G ϕ. В тех случаях, когда из контекста ясно, о какой грамматике идет речь, нижний индекс G будем опускать. Иными словами, цепочка ϕ непосредственно выводима из ψ, если можно взять несколько символов в цепочке ψ, заменить их на другие символы согласно правилу грамматики и получить цепочку ϕ. Любая из цепочек δ и β (или обе они) может быть пустой. В предельном случае вся цепочка ψ может быть заменена на цепочку ϕ, тогда в грамматике G должно существовать правило ψ→ϕ ∈ P. Через ⇒k будем обозначать k-ю степень отношения ⇒. Иначе говоря, α⇒kβ , если существует последовательность α0,α1, α2,…, αk, состоящая из k+1 не обязательно различных цепочек, для которых α=α0, αi-1⇒αI, 1≤i≤k и αk=β. Эта последовательность называется выводом длины k цепочки β из цепочки α в грамматике G. Введем отношение ϕ⇒+ψ означающее, что цепочка ψ выводима из ϕ нетривиальным образом: ϕ⇒+ψ тогда и только тогда, когда ϕ⇒iψ для некоторого i≥1. Говорят, что цепочка ψ выводима из ϕ (обозначение ϕ⇒*ψ)тогда и только тогда, когда ϕ⇒iψ для некоторого i≥0. Вывод называется законченным, если на основе цепочки ϕ, полученной в результате вывода, нельзя больше сделать ни одного шага вывода. Иначе говоря, вывод называется законченным, если цепочка ϕ пустая или содержит только терминальные символы грамматики G = (N, T, P, S). Цепочка, полученная в результате законченного вывода, называется конечной цепочкой вывода. Грамматики можно классифицировать по виду их правил. Грамматика G = (N, T, P, S) называется • праволинейной, если каждое правило из Р имеет вид A→αB или A→α, где A,B∈N, α∈V*; • контекстно-свободной (бесконтекстной), если каждое правило из Р имеет вид A→α, где A∈N, α∈V*; • контекстно-зависимой (неукорачивающей), если каждое правило из Р имеет вид α→β, где α≤β. Грамматика, не удовлетворяющая ни одному из указанных ограничений, называется грамматикой общего вида или грамматикой без ограничений. Пример 2. Праволинейная грамматика G1=({S}, {0, 1}, {S→0S|1S|e},S) L(G1)={0,1}*. порождает язык Пример 3. Пусть G2=({E, T, F}, {a, +, *, (, )}, P, E), где Р состоит из правил E→E+T|T T→T*F|F F→(E)|a Язык L(G2) представляет собой множество арифметических выражений, построенных из символов a, +, *, (, ). Грамматика G2 — контекстно-свободная. Пример 4. Пусть G3=({C, B, S}, {a, b, c}, P, S), где Р состоит из правил S→aSBC|abC CB→BC bB→bb bC→bc cC→cc Эта грамматика порождает зависимая грамматика. язык {anbncn| n≥1}.Очевидно, это контекстно- Для записи синтаксиса конструкций языков программирования часто используют форму Бэкуса-Наура. Она практически ничем не отличается от нотаций продукций формальных грамматик, только вместо знака → используется обозначение ::=. Пример 5. Десятичное целое без знака. <Десятичное_целое_без_знака>::=<Цифра>|<Десятичное_целое_без_знака><Цифра> <Цифра>::=0|1|2|3|4|5|6|7|8|9 Семантика. Для однозначного описания семантики целесообразно выбрать математическую форму описания, т. е. сопоставление математических объектов для описания конструкций языка. Язык программирования предоставляет как простые операторы, так и методы композиции, которые позволяют формировать структурные операторы из других простых или составных операторов. Поэтому для описания семантики языка программирования нужно решить две связанные между собой задачи. 1. Определить виды используемых в языке программирования простых операторов, а также часто используемые методы композиции решений подзадач. 2. Обеспечить правила вывода, позволяющие определить эффект воздействия простого оператора на состояние вычисления, а также вывести определенные свойства составного оператора из свойств составляющих его компонент. Ниже мы проиллюстрируем формальное определение семантики на простого модельного языка содержащего основные конструкции и композиции, встречающиеся в современных языках программирования . примере правила Фундаментальное свойство основных правил композиции современных языков программирования заключается в том, что они дают возможность объединить в одну сложную структурную схему с одним входом и одним выходом, которая имеет вид, изображенный на рис. 3.1 P Q Рис 3.1. Здесь S — оператор, группа операторов или программа; Р — предусловие — логическое выражение, которое должно быть истинным перед выполнением S; Q — постусловие — логическое выражение, которое должно принимать истинное значение при выходе из вычислений S. Если ввести в язык понятие комментария как произвольного текста, заключенного в фигурные скобки, то свойство, изображенного на рис 3.1. можно в тексте программы записать как: (1) {P} S {Q} Это — спецификация программы S со следующим смыслом: если соотношение Р истинно перед выполнением S, то Q будет истинно после выполнения S. Пусть Р некоторое логическое выражение. Для простоты будем полагать, что кванторы всеобщности и существования не принадлежат Р. Для выражения ∀x(P ) считаем, что вхождение переменной х в ∀x связано квантором всеобщности и каждое вхождение х в Р –связанное значение. Та же терминология применяется к выражению ∃x(P) , за исключением того, что в этом случае вхождение переменной х в ∃x называют связанным квантором существования. Каждое вхождение переменной х в логическое выражение, которое не связано квантором , называют свободной переменной этого выражения. Пример 1 • все переменные в выражении ¬∃x(∀y ( y ≤ x)) связаны; • все переменные в выражении (i < j ) = ( j < k ) свободны. Определим понятие подстановки. Пусть P - логическое выражение. Нотация (2) Pyx используется для выражения, которое получается в результате систематической подстановки выражения у вместо всех свободных вхождений переменной х в Р. Аналогично (3) Pyx11......ynxn обозначает одновременную подстановку вместо всех свободных вхождений любой переменной xi в P соответствующего выражения yi. Вхождения xi в некоторые yi не замещаются. Переменные x1...xn должны быть различными, в противном случае подстановка не определена. Пример 2. ( z = 10) zx + y = ( x + y = 10) ( x + x + y ) ax ,+yb ,c = a + b + a + b + c ( x + x + y ) xx ,+yy , z = x + y + x + y + z Правила вывода - это схемы рассуждений, позволяющие доказывать свойства программы. Они имеют следующий вид: H 1 ,..., H n H (4) Если H1,…,Hn — истинные утверждения, то H — также истинное утверждение. Рассмотрим правила вывода для простых операторов языка программирования. Пустой оператор Он не оказывает никакого воздействия на значения программных переменных. Для любого P имеем правило вывода (5) {P}{P} Оператор присваивания Он имеет вид x = e и устанавливает значение переменной x равным значению выражения e. Тогда для любого P (6) e { Pч } x:=e { P } Пример 3. {x+y=10} z:=x+y {z=10} {x-y>0} x:=x-y {x>0} Рассмотрим правила вывода для более сложных конструкций - составных и условных операторов. Составной оператор Он образуется путем последовательной композиции операторов S1; S2;…;Sn. Знак ; используется для соединения операторов в последовательность. В модельном языке составной оператор (или блок операторов) представлен программной конструкцией: (7) begin S1; S2;…;Sn end Правило вывода для составного оператора имеет вид: (8) ∀i = 1,..., n{Pi −1} S i {Pi } {P0 } begin S1 ; S 2 ;...; S n end {Pn } Пример 4. Дан составной оператор Z: = z+y u := u-1 Известно постусловие Q = (z+u*y = x*y, u≥0) Тогда согласно правилу вывода для оператора присваивания легко установить {z+(u-1)*y = x*y, u-1≥0} u := u-1 {z+u*y = x*y, u≥0} {z+u*y = z+y+(u-1)*y = x*y, u>0} z := z+y {z+(u-1)*y = x*y, u-1≥0} Следовательно, для рассматриваемого составного оператора справедливо {z+u*y=z+y+(u-1)*y=x*y, u>0} begin z := z+y; u := u-1 end {z+u*y=x*y, u≥0} Нетрудно заметить, что логическое выражение z+u*y=x*y сохраняется при выполнении составного оператора. Логические выражения, сохраняемые прорграппной конструкцией называются инвариантами. Нетрудно заметить, что в нашем примере выполнение отдельных операторов присваивания в составном операторе не сохраняет инвариант. Выражение z+u*y=x*y инвариантно для всего составного оператора Условный оператор Если S1 и S2 - операторы, а B - булево выражение, то if B then S1 else S 2 endif (9) есть оператор, выполняющий следующие действия: вычисляется B; если B=true, то выполняется оператор S1, в противном случае — S2 . Пусть предусловие этого оператора есть P, а постусловие — Q. Тогда если значение B есть true, то оператор S1 будет иметь постусловие Q, если справедливо соотношение {P ∧ B} S1 {Q} (10) Аналогично для оператора S2 должно быть справедливо соотношение {P ∧ ¬B} S2 {Q} (11) Объединяя (10,11) можно получить правило вывода для условного оператора {P ∧ B} S1 {Q}, {P ∧ ¬B} S 2 {R} {P} if B then S1 else S 2 endif {Q} (12) Рассмотрим более простую форму условного оператора If (13) B Then S Endif По этому оператору вначале вычисляется B. Если B истинно, то выполняется оператор S, иначе должна быть выполнена тождественная операция. Правило вывода для оператора (13) имеет вид {P ∧ B} S {Q}, P ⇒ Q {P} If B Then S {Q} (14) Пример 5. Легко доказать, что оператор If r0. В самом деле, составной оператор удовлетворяет соотношению (q*y+r=x,0≤r= y r := r-yz; q := 1+q Wend в предположении, что {x≥0 ∧ y>0}. Покажем, что данный цикл имеет инвариант x=q*y+r ∧ 0≤r Согласно правилам вывода для оператора присваивания и составного оператора легко получаем соотношение {x=q*y+r ∧ 0≤r-y} r:=r-y; q:=q+1 {x=q*y+r ∧ 0≤r} Предусловие составного оператора имеет форму P∧B. рассматриваемого цикла справедливо согласно (20) соотношение: {(x=q*y+r) ∧ 0≤r} Поэтому для While r>=y r:=r-y; q=q+1 Wend {(x=q*y+r) ∧ 0≤r0 ∧ y>0. Пусть требуемое постусловие цикла есть {z=x*y}. Очевидно, если объединить его с условием завершения цикла u=0, то его можно переписать в виде z+u*y=x*y. Используя правила вывода для операторов присваивания и составного оператора “z=z+y u=u-1” легко показать, что он имеет предусловие и постусловие {z+u*y=x*y}. Отсюда легко получить числитель правила вывода (22): {z+u*y=x*y} z := z+y; u := u-1 {z+u*y=x*y}, {z+u*y=x*y} ∧ u>0 Отсюда и из правила вывода (22) следует, что {z+u*y=x*y} z := z+y; u := u-1 {{z+u*y=x*y}∧ u=0} Очевидно, полученное постусловие эквивалентно {z=x*y}. Следует обратить внимание, что неявно мы здесь воспользовались еще одной группой правил вывода - правилами консеквенции. Правила консеквенции имеют вид (23) {P} S {R}, R ⇒ Q P ⇒ R, {R} S {Q} , {P} S {Q} {R} S {Q} Таким образом, мы строго определили семантику основных некоторого гипотетического языка программирования посредством правил вывода. операторов формальных Корректность программ. Правильность программ обычно проверяется тестированием. Оно заключается в том, что выбираются конкретные значения входных данных программы и программа выполняется с этим входными данными. Результаты работы программы сравниваются с заранее известными правильными результатами. Тестирование - процесс выполнения программы с намерением найти ошибку. Но оно никогда не докажет их отсутствия. Поэтому необходимо абстрагироваться от индивидуальных процессов и постулировать некоторые общезначимые условия, которые можно вывести из характера поведения. Этот аналитический метод проверки носит название верификация программ или доказательство корректности программ. Верификация основана на систематическом применении правил вывода, полученных в предыдущем параграфе. Проиллюстрируем этот прием на примерах программирования на языке Visual Basic. Единственное отличие нотации данного пункта, от ранее введенной – использование комментариев и оператора присваивания этого языка. Пример 1. Алгоритм деления целых неотрицательных чисел x на у. Результат операции частное q и остаток r, которые удовлетворяют соотношению x=q*y+r ∧ 0≤r0 Алгоритм можно записать следующим образом ‘{x≥0 ∧ y>0} q = 0 r = x ‘{x=q*y+r ∧ 0≤r} While r>=y ‘{x=q*y+r ∧ 0≤y=y r=r-y q=1+q Wend ‘{(x=q*y+r) ∧ 0≤r0 ∧ y>0} ‘сложить значение у само с собой x раз ‘ {z=x*y} Предусловие есть требование положительности х и у. Постусловие - результат вычислений. Правильность преобразования предусловия в постусловие следует из определения операции сложения. Следующий уровень декомпозиции требует введения переменных z для хранения промежуточной суммы и u, которая следит, сколько раз будет выполнено сложение. Таким образом, получаем следующую декомпозицию: 1. ‘{x>0 ∧ y>0} Установить z равным нулю, u равным x ‘{z+u*y=x*y ∧ u>0} 2. ‘{z+u*y=x*y ∧ u>0} ‘Увеличить z на величину y и уменьшить u на 1; повторять этот процесс до тех ‘пор пока u не станет равным 0 {z=x*y} Нетрудно заметить, что инвариантом является логическое выражение z+u*y=x*y Тогда подзадача 1 содержит операторы присваивания, инициализирующие этот инвариант. Действие «увеличить z на величину y и уменьшить u на 1» подзадачи 2 построено таким образом, чтобы сохранить инвариант. В самом деле, Z+y+(u-1)*y=z+u*y=x*y Условие «повторять этот процесс до тех пор, пока u не станет равным 0», гарантирует, что после окончания итераций будет получен требуемый результат z=x*y. Корректность подзадач показана, и мы получаем программу ‘{x>0 ∧ y>0} z = 0 u = x Do z = z+y u = u-1 Loop until u=0 ‘{z=x*y} Можно непосредственно доказать корректность этой программы. До сих пор мы рассматривали только один аспект корректности программ, а именно, являются ли корректными результаты, вырабатываемые в точке выхода, если аргументы удовлетворяют входному утверждению. Другим не менее важным аспектом корректности является требование, чтобы результатам после конечного числа шагов алгоритма. Рассмотрим выражением. цикл While B S Wend. Пусть е процесс является приводил к целочисленным Предположим, что (1) P∧B ⇒ (e>0) И для e0, принимающего целочисленные значения, ∀(e0 ({0 < e = e0 }S{0 ≤ e < e0 }) (2) Это значит, что e≥0 также является инвариантом цикла. Кроме того, согласно (2) каждое выполнение оператора S уменьшает значение е. При условии выполнения (1), (2) и, полагая, что {P∧B} S {P} доказано, сразу можно сделать вывод о конечности итерационного процесса, так как е не может уменьшаться бесконечное число раз и оставаться положительным, как требует (1). Пример 3. Для цикла примера 1 в качестве функции е в соотношениях (1) и (2) следует выбрать переменную r. Для цикла do S loop until B требуется в дополнении к {P}S{Q} и Q∧¬B ⇒ P необходимо доказать (3) P ⇒ (e>0) Тогда гарантируется завершаемость итерационного процесса за конечное число шагов. ∀(e0 ({0 < e = e0 }S{0 ≤ e < e0 }) (4) Пример 4. Для цикла примера 2 в качестве функции е в соотношениях (3) и (4) следует выбрать переменную u. ЯЗЫК ПРОГРАММИРОВАНИЯ СВЕДЕНИЯ TURBOPASCAL 7.0. КРАТКИЕ Изучение языка программирования представляет собой знакомство с формальными правилами записи алгоритмов для их последующего выполнения компьютером. Как и любой алгоритм, являющийся, последовательностью инструкций (шагов или этапов), программа на языке Turbo Pascal состоит из команд (операторов), записанных в определенном порядке и формате. Эти операторы позволяют получать, сохранять и обрабатывать данные различных типов (числа, символы, строки символов, т.д.) и состоят из "служебных слов" языка. Этих слов не так много, но их значение трудно переоценить. Служебные слова можно использовать только по своему прямому назначению. Подробному изложению правил и тонкостей программирования на языке Turbo Pascal посвящены многочисленные издания, учебники и справочники, издаваемые в нашей стране и за рубежом. Поэтому в рамах данного пособия рассмотрим только основные правила записи программ, конструкции и операторы языка Turbo Pascal, представив материал в виде краткой справки. • • Общая структура программ • Алфавит языка • Символы используемые в идентификаторах: все буквы латинского алфавита, арабские цифры, символ подчеркивания (_). Малые (строчные) и большие (прописные) буквы не различаются. Первым символом может быть только буква или символ подчеркивания. Длина имени может быть от 1 до 127 символов. При этом первые 63 символа в различных именах являются уникальными, т.е. должны обязательно отличаться друг от друга. Под идентификатором понимается имя любого объекта программы. • Разделители: используются для отделения друг от друга идентификаторов, служебных слов и чисел. В качестве разделителей используется пробел или комментарий – любой текст, заключенный между фигурными скобками { и } или скобками вида (* и *). Текст комментария можно расположить в любой части программы. • Специальные символы: знаки пунктуации (; : .. [ ] . и др.), знаки операций (арифметические, логические и др.), зарезервированные слова языка (служебные слова, иена директив и т.п.). • Неиспользуемые в конструкциях языка символы: буквы русского алфавита и некоторые символы (& % и др.). • Основные составные части программы Заголовок программы Uses-фраза Описательная часть программы Исполнительная часть программы Program имя программы; Uses список подключаемых модулей; Const список констант; ……………… Begin Оператор 1; Оператор 2; …………… Оператор N; End. Заголовок программы является необязательным элементом и может отсутствовать. Uses-фраза используется для подключения к программе внешних модулей. Модуль (Unit) – это набор стандартных операций и описаний, которые можно использовать, как готовые конструкции. Структура Uses-фразы: Uses имя-модуля-1, имя-модуля-2, ..., имя-модуля-n; Разделы объявлений программы (описательная часть) Объявление меток Меткой называется любое целое число без знака, либо обычный идентификатор, с помощью которого в исполнительной части программы можно пометить отдельные операторы для быстрого перехода к ним. Оператор отделяется от метки двоеточием ( : ). Label имя-метки-1, имя-метки-2, …, имя-метки-n; Объявление констант Под константой понимается конструкция языка, значение которой в исполнительной части программы меняться не может. Структура данного раздела объявлений: Const имя-константы-1 = значение; имя-константы-2 = значение; ………………………………… имя-константы-n = значение; • Объявление типов данных • Под типом данных понимается множество допустимых значений данных, а также совокупность операций над ними. Все типы данных языка TurboPascal можно разделить на стандартные (предопределенные) и пользовательские определяемые программистом. Описание пользовательских типов данных осуществляется в этом разделе объявлений. Type имя-типа-1 = описатель-типа; имя-типа-2 = описатель-типа; ………………………………… имя-типа-n = описатель-типа; Объявление типизированных констант Осуществляется также как и обычных констант, но с указанием их типа. Const имя-константы-1: тип-константы = значение; имя-константы-2: тип-константы = значение; ………………………………… имя-константы-n: тип-константы = значение; • Объявление переменных • • В отличие от констант значения переменных в исполнительной части программы могут изменяться. Для их описания используют следующий раздел объявлений. Var имя-переменной-1А, имя-переменной-2А: тип-А; имя-переменной-1В, имя-переменной-2В: тип-В;… • Объявление процедур • Процедурой называется подпрограмма, предназначенная для выполнения какой-либо законченной последовательности действий. Структура процедуры такая же, что и у основной программы (заголовок, разделы объявлений процедуры, исполнительная часть процедуры). Procedure имя-процедуры(список формальных параметров); <описания процедуры> begin <операторы тела процедуры> end; Список формальных параметров может содержать параметры различных категорий: параметрызначения, параметры-переменные, параметры-константы, параметры без типа, параметры-процедуры и параметры-функции. • • Объявление функций • Функцией называется подпрограмма, предназначенная для выполнения какой-либо законченной последовательности действий и возврата в вызывающую программу значения какого-либо параметра. Структура функции такая же, что и у основной программы (заголовок, разделы объявлений, операторы тела функции). Function имя-функции (список формальных параметров): тип-функции; <описания функции> begin <операторы тела функции> end; Список формальных параметров у функции формируется по тем же правилам, что и у процедуры. Типы данных Простые типы данных 1 Целые типы (предопределенные) Идентификатор Integer Shortint Longint Byte Word Длина 2 байта Диапазон принимаемых значений -32768…+32767 1 байт 4 байта 1 байт 2 байта -128…+127 -2147483648…+2147483647 0…255 0…65535 2 Символьный тип – стандартный тип языка Char определяется значениями полного набора ASCII-символов и занимает в памяти 1 байт. 3 Логический тип Boolean (1 байт) представляет собой тип данных, любой элемент которого может принимать лишь одно из двух возможных значений: True и False. 4 Перечисляемый тип – определяется пользователем с помощью набора идентификаторов, с которым могут совпадать значения параметра, объявленного данным типом. Type имя-типа = (значение1, значение2, ... значение-n); 5 Тип-диапазон – задается пользователем с помощью указания наименьшего и наибольшего значений, разделенных двумя точками (..), которые могут принимать параметры данного типа. Type имя-типа = минимальное-значение .. максимальное-значение; 6 Вещественные типы Диапазон принимаеИдентифиЧисло значаДлина мых катор щих цифр значений 6 байт 11–12 Real ±(2,9×10-39…1,7×1038) 4 байта 7–8 Single ±(1,5×10-45…3,4×1038) 8 байт 15–16 Double ±(5,0×10324 …1,7×10308) 10 байт 19–20 Extended ±(1,9×104951 …1,1×104932) 63 8 байт 19–20 -2 +1…263-1 Comp Все простые типы данных за исключением, вещественных, называются порядковыми. Структурированные типы 1) Массивы – тип данных, представляющий собой совокупность фиксированного числа однотипных компонент. Каждая компонента массива имеет свой индекс, поэтому их иногда называют индексированными переменными. Объявляют тип данных массив следующим образом: Type тип-массив = array[тип-индекса-1,тип-индекса-2,..., тип-индекса-n] of тип-элементов; 2) Множество – задает интервал значений, который является множеством всех подмножеств базового типа (базовым типом может быть любой порядковый тип, состоящий не более чем из 256 элементов) и определяется так: Type тип-множество = set of базовый-тип; Над множествами выполняют те же операции, что и над математическими множествами: проверки принадлежности, объединения, разности, пересечения. 3) Строковый тип данных String определяет последовательность ASCII-символов произвольной длины (от 0 до 255 символов), задаваемой при описании типа. Type тип-строка = string[максимально возможная длина сроки]. Над строками выполняют операции конкатенации или сцепления – (строка: = строка-1 + строка-2 + ... + строка-n;), сравнения и обрабатывают с помощью стандартных функций языка. 4) Запись представляет собой такой тип данных, который содержит определенное число элементов (полей) и является смесью разных типов. Type тип-запись = record переменная-1: тип-1; …………………………. переменная: тип-n end; 5) Файловый тип представлен в языке TurboPascal в трех вариантах: текстовые файлы, типизированные файлы, нетипизированные файлы: текстовый файл – Var переменная: text; типизированный файл – Var переменная: file of тип компонента; нетипизированный файл – Var переменная: file; Текстовый файл состоит из строк символов и является файлом формата DOS. Типизированный файл записывается в машинных кодах и имеет жесткую структуру, как правило, типа Record. Нетипизированные файлы используются в основном в тех случаях, когда файловая переменная необходима для операций ввода-вывода. Указатель Указатель дает адрес объекта определенного типа, называемого базовым типом. При определении типа-указателя используется этот базовый тип, перед которым ставится признак указателя – знак ^. Type тип-указатель = ^тип-переменной; Var переменная-указатель: тип-указатель; Для работы с указателями используется адресный оператор @ и ряд стандартных конструкций языка. Процедурный тип Процедурный тип указывает, какой вид подпрограммы (процедуру или функцию) и с какими формальными параметрами можно использовать в качестве нового объекта программы (например, в виде формального параметра другой подпрограммы). Объявление процедурного типа похоже на заголовок подпрограммы. Type имя-типа = procedure(список формальных параметров); Type имя-типа = function(список формальных параметров): тип-функции; Далее можно вводить переменные этих типов. Операции языка TurboPascal • Арифметические операции: сложение ( + ), вычитание ( – ), умножение ( * ), деление ( / ), целочисленное деление (div), остаток деления (mod). Логические операции Not A And not A A B Or A and B A B Xor A or B A B A xor B Fals True False Fals False Fal False False Fals Fals False e e se e e True False False Tru False Fal True True Fals Tru True e se e e – – True Fals False Tru False True True Fals True e e e – – True Tru True Tru True True True Tru False e e e Операции отношения: равно ( = ), не равно ( <> ), меньше ( < ), больше ( > ), меньше или равно ( <= ), больше или равно ( >= ). Операторы языка TurboPascal Все операторы языка можно разделить на две группы: простые и структурированные. К простым операторам относятся те, которые не содержат в себе других операторов. К ним относятся: оператор присваивания, пустой оператор, оператор вызова процедуры, оператор безусловного перехода GOTO. Структурированными называются операторы, которые могут включать в себя другие операторы. К этим операторам относятся следующие: составной оператор, условные оператор IF, оператор множественного выбора CASE, оператор цикла FOR, оператор цикла WHILE, оператор цикла REPEAT, оператор над записями WITH. Оператор присваивания – присваивает переменной значение какого-либо выражения, при этом тип переменной должен быть совместим с типом выражения. имя-переменной := выражение; Пустой оператор – не выполняет никакого действия может быть отображен в программе в виде метки или точки с запятой, отделяющих пустой оператор от предыдущих или последующих операторов. Оператор вызова процедуры – представляет собой оператор состоящий из имени вызываемой процедуры со списком фактических параметров (если они есть). имя-процедуры (список фактических параметров); Оператор безусловного перехода GOTO – изменяет стандартную последовательность выполнения операторов и осуществляет переход к оператору, помеченному меткой. Goto метка; Составной оператор – представляет собой совокупность последовательно выполняемых операторов, заключенных в операторные скобки BEGIN и END. Begin Оператор-1; Оператор-2; ………………. Оператор-N End; Условный оператор IF – является оператором разветвления и изменяет порядок выполнения операторов в зависимости от истинности или ложности некоторого логического условия (выражения). Этот оператор может быть записан в двух формах: полной форме – If условие Then Оператор-1 Else Оператор-2; сокращенной форме – If условие Then Оператор-1; Оператор-1 выполняется в случае истинности условия, а Оператор-2 в случае ее ложности. Оператор множественного выбора CASE – позволяет выбрать один вариант решения из некоторого количества вариантов. Case выражение of Значение-1: Оператор-1; Значение-2 .. Значение-3: Оператор-2; Значение-4, Значение-5, Значение-6: Оператор-3; …………………… Else оператор-N End; Выражение является выражением порядкового типа, а ветвь ELSE может отсутствовать. В данной структуре выполняется тот оператор, для которого фиксированное Значение совпадает со значением Выражения. Оператор цикла FOR – осуществляет выполнение одного простого или составного оператора известное число раз. Существует два варианта записи этого оператора: • инкрементная (с возрастанием параметра) For Параметр-переменная := Выражение-1 To Выражение-2 do Оператор; • декрементная (с убыванием параметра) For Параметр-переменная := Выражение-1 Downto Выражение-2 do Оператор; Переменная, являющаяся параметром цикла, может быть только порядкового типа и изменяется в каждой итерации на единицу. Выражение-1 и Выражение-2 определяют соответственно начальное и конечное значение параметра цикла. Оператор цикла с предусловием WHILE –организует выполнение одного простого или составного оператора неизвестное заранее число раз до тех пор, пока сохраняется истинность логического выражения (условия завершения цикла). While Условие do Оператор; Оператор цикла с постусловием REPEAT – организует выполнение цикла, состоящего из любого числа операторов, заранее неизвестное число раз до тех пор, пока логическое выражение (условие выхода из цикла), проверяемое в конце каждой итерации не примет значение True. В этом случае цикл завершает свою работу. Repeat Оператор-1; Оператор-2; ……………… Оператор-N Until Условие; Оператор над записями WITH – специальный оператор, позволяющий работать с объектами структурированного типа Record. При использовании этого оператора имя записи пишется только один раз, а внутри оператора указываются только имена полей записи. With Имя-записи do Оператор; МОДУЛИ ЯЗЫКА TURBOPASCAL В языке TurboPascal имеется большое количество стандартных подпрограмм, типов, констант и других конструкций, объединенных в несколько стандартных модулей. Они позволяют упростить процедуру написания программ и более полно использовать возможности компьютера и операционной системы. В частности ввод и вывод данных осуществляется при помощи стандартных процедур Read, ReadLn, Write, WriteLn. При составлении программ только стандартный модуль System автоматически подцепляется к программе, что позволяет пользоваться всеми его объектами, не делая для этого никаких дополнительных указаний в конструкции программы. Для использования всех остальных стандартных модулей (Crt, Graph, Dos, Strings, WinDos и др.) необходимо их присоединять к программе, используя для этого Uses-фразу. Рассмотрим некоторые, наиболее часто используемые стандартные конструкции языка TurboPascal (для правильного использования подпрограмм необходимо ознакомиться со специальной справочной литературой, содержащей подробное описание заголовков подпрограмм). Модуль SYSTEM Этот модуль является основной библиотекой среды TurboPascal. В него входят все предопределенные процедуры и функции стандарта языка Паскаль, а также дополнительные подпрограммы, позволяющие выполнять разнообразные действия общего назначения. • Арифметические функции: • Abs(выражение) – абсолютное значение аргумента; • ArcTan(выражение) – арктангенс аргумента; • Cos(выражение) – косинус аргумента; • Exp(выражение) – показательная функция с основанием е (экспонента); • Frac(выражение) – дробная часть аргумента; • Int(выражение) – целая часть аргумента; • Ln(выражение) – натуральный логарифм аргумента; • Odd(выражение) – проверяет аргумент на четность; • Pi – число пи (3,1415926…); • Pred(выражение) – предшествующее значение аргумента порядкового типа; • Random[(число)] – возвращает случайное число вещественного или целого типа; • Sin(выражение) – синус аргумента; • Sqr(выражение) – квадрат аргумента; • Sqrt(выражение) – квадратный корень аргумента; • Succ(выражение) – следующее значение аргумента порядкового типа. • Арифметические процедуры: • Dec(V,N) – уменьшает переменную порядкового типа V на величину N; • Inc(V, N) – увеличивает переменную порядкового типа V на величину N. • Процедуры и функции преобразования типов: • Str(N:p:q, S) – процедура, преобразующая число N в строку символов S (p и q – формат чисел, p – общее количество знаков числа, q – число знаков после запятой для вещественных чисел); • Val(S, N, E) – процедура, преобразующая символьное представление числа S в числовую форму N, Е – код ошибки; • Chr(число) – функция, возвращающая символ с указанным ASCII-кодом; • Ord(выражение) – функция, возвращающая порядковый номер значения выражения порядкового типа; • Round(выражение) – функция, округляющая вещественное число до целого; • Trunc(выражение) – функция, выделяющая целую часть выражения. • Процедуры и функции работы со строками: • Delete(S, N, I) – процедура, удаляющая из строки S ее часть, начиная с символ N длиною I; • Insert(S1, S2, N) – процедура, вставляющая в строку S2 подстроку S1, начиная с символа N; • Concat(S1, S2,...,Sn) – функция, объединяющая строки S1, S2,...,Sn в одну; • Copy(S, N, I) – функция, выделяющая из строки S I символов, начиная с N-ого. • Length(S) – функция, определяющая текущую длину строки S; • Pos(S1, S2) – функция, определяющая номер позиции, с которой начинается подстрока S1 в строке S2. Процедуры управления программой: Break – процедура, осуществляющая немедленный выход из цикла; Continue – процедура, осуществляющая досрочное начало новой итерации в цикле; Exit – процедура, осуществляющая выход из текущей подпрограммы или программы; Halt – процедура, прекращающая выполнение программы. • Процедуры ввода-вывода: • Read(список-ввода) – процедура, осуществляющая ввод исходных данных в соответствии со списком; • ReadLn(список-ввода) – процедура, осуществляющая ввод исходных данных в соответствии со списком, переводя после ввода курсор на новую строку; • Write(список-вывода) – процедура, осуществляющая вывод результатов в соответствии со списком; • WriteLn(список-вывода) – процедура, осуществляющая вывод результатов в соответствии со списком, переводя после вывода курсор на новую строку. • Процедуры управления динамической памятью: • Dispose(переменная-указатель) – освобождает память, занятую динамической переменной; • FreeMem(переменная-указатель, размер) – удаляет динамическую переменную заданного размера; • GetMem(переменная-указатель, размер) – создает новую динамическую переменную заданного размера; • New(переменная-указатель) – создает новую динамическую переменную. • Процедуры для управления вводом-выводом: • Append(файловая-переменная) – открывает существующий текстовый файл для добавления в конец информации; • Assign(файловая-переменная, имя-файла) – связывает файловую переменную с внешним файлом; BlockRead(файловая-переменная, буфер, число-компонент, результат) – читает компоненты из файла без типа; BlockWrite(файловая-переменная, буфер, число-компонент, результат) – записывает компоненты в файл без типа; • Close(файловая-переменная) – закрывает открытый файл; • Read(файловая-переменная, список-ввода) – читает информацию из типизированного файла; • ReadLn(файловая-переменная, список-ввода) – читает информацию из типизированного файла и переходит к следующей строке файла; • Reset(файловая-переменная) – открывает существующий файл; • Rewrite(файловая-переменная) – открывает новый файл; • Seek(файловая-переменная, номер-позиции) – настраивает файл на требуемую компоненту; • Write(файловая-переменная, список-вывода) – записывает информацию в файл; • WriteLn(файловая-переменная, список-вывода) – записывает информацию в файл и выводит в него признак конца строки. • Функции для управления вводом-выводом: • Eof(файловая-переменная) – фиксирует конец файла; • Eoln(файловая-переменная) – фиксирует конец строки текстового файла; • FilePos(файловая-переменная) – возвращает номер текущей компоненты файла; • FileSize(файловая-переменная) – возвращает текущий размер файла в компонентах; • IOResult – возвращает код выполнения операции ввода-вывода. Модуль CRT Этот модуль содержит константы, переменные и подпрограммы, предназначенные для работы с консолью в текстовом режиме. Рассмотрим основные подпрограммы модуля Crt. Процедуры: ClrScr – очищает текущее окно на экране; Delay(время) – задает задержку выполнения программы в миллисекундах; GotoXY(x, y) – перемещает курсор к элементу экрана с заданными координатами; TextBackground(цвет) – задает цвет фона; TextColor(цвет) – задает цвет символов; Window(x1, y1, x2, y2) – задает размеры окна на экране. Функции: KeyPressed – анализирует нажатие клавиш на клавиатуре; ReadKey – считывает символ с клавиатуры; WhereX – возвращает текущую координату X курсора; WhereY – возвращает текущую координату Y курсора. Модуль GRAPH Этот модуль содержит типы, константы, переменные и подпрограммы, предназначенные для работы с консолью в графическом режиме. Количество предопределенных объектов в этом модуле велико. Одних процедур и функций в этом модуле более 80. Вот лишь некоторые основные процедуры: Arc(x, y, угол1, угол2, радиус) – построение дуги окружности; Bar(x1, y1, x2, y2) – построение прямоугольника; Bar3D(x1, y1, x2, y2, ширина, грань) – построение параллелепипеда; Circle(x, y, радиус) – построение окружности; ClearDevice – очистка графического экрана; CloseGraph – завершение работы в графическом режиме; FloodFill(x, y, цвет-границы) – заполнение замкнутой области текущим орнаментом; InitGraph(драйвер, режим, путь) – инициализирует графический режим работы; Line(x1 ,y1, x2, y2) – построение линии от точки до точки; OutText(строка) – вывод на экран строки символов; PutPixel(x, y, цвет) – построение точки; SetBkColor(цвет) – задание цвета фона экрана; SetColor(цвет) – задание текущего цвета; SetFillStyle(параметр-заполнения, цвет) – задание параметров заполнения фигур. БАЗЫ ДАННЫХ 1. ОСНОВНЫЕ ПОНЯТИЯ При наличии большого объема перерабатываемой с помощью компьютера информации возникают задачи обеспечения наилучшего хранения данных, их редактирования и обработки. Следовательно, нужно - наилучшим образом организовать данные; - обеспечить наилучшее управление данными. Данные - информация, представленная в определенной форме, пригодной для последующего хранения и обработки. Предметная область ( ПО ) - часть реального мира, подлежащая изучению с целью организации управления и последующей автоматизации. Предметная область определена, если известны существующие в ней объекты, их свойства и связи между ними (объектные отношения). Объект - это то, о чем необходимо хранить информацию. Каждый объект характеризуется определенным состоянием, которое описывается с помощью ограниченного набора свойств и связей (отношений) с другими объектами. Свойства объекта могут не зависеть от его связей с другими объектами, т.е. являются локальными. Если свойства объекта зависят от связей с другими объектами, то они называются реляционными. Связь между объектами в зависимости от числа входящих в нее объектов характеризуется степенью: n = 2,3,...,k . База данных (БД) - совокупность данных конкретной предметной области, причем данные организованы по определенным правилам, предусматривающим общие принципы описания, хранения и манипулирования, и не зависят от программ обработки. В базе данных обеспечивается интеграция логически связанных данных при минимальном дублировании хранимых данных. Модель данных определяет правила, в соответствии с которыми структурируются данные. Однако структурные правила не обеспечивают возможности полного представления семантики данных и способа их использования. Поэтому должны быть определены операции над данными. Е. Кодд выделяет в модели данных три наиболее существенных компонента: - совокупность средств определения допустимых структур данных (структуризация данных); - множество операций, применимых к допустимому состоянию базы данных для поиска или модификации данных; - множество ограничений целостности, множество допустимых состояний базы данных. явно или неявно определяющих Структуризация данных определяется разнообразием и количеством типов объектов модели данных, ограничениями на структуру данных. Кроме того, между данными допускается устанавливать дополнительные связи, называемые логическими связями. Множество операций определяет виды обработок: операции выборки (поиск) и операции, изменяющие состояние данных (редактирование). Ограничения целостности поддерживаются средствами, предусмотренными в модели данных для выражения ограничений на значения данных и связи. Эти ограничения характеризуют достоверное состояние данных. Система управления базами данных ( СУБД ) - набор программных средств, обеспечивающих создание и обслуживание баз данных и выполнение операций над данными. Информационная система ( ИС ) представляет собой систему по сбору, передаче и обработке информации о заданной предметной области, снабжающую всех своих пользователей необходимой информацией. Информационную систему определяют как систему информационных, математических, программных, языковых, организационных и технических средств, предназначенных для централизованного накопления и коллективного многоаспектного использования данных для получения необходимой информации. Основными компонентами ИС являются: - собственно база данных ( БД ), содержащая необходимую информацию о редметной области и описание структуры хранимых данных; система управления базой данных ( СУБД ), выполняющая типовые процедуры управления данными; прикладная программа (приложение пользователя ), реализующая требуемый алгоритм ведения диалога пользователя с информационной системой для обслуживания БД и решения всего комплекса задач конкретной предметной области. 2. БАЗА ДАННЫХ Данные предметной области удобно хранить в интегрированной базе данных по следующей основной причине: такая организация обеспечивает централизованное управление данными. Отметим преимущества, которые вытекают из централизованного управления данными. Сокращается избыточность в хранимых данных ввиду отсутствия дублирования данных в различных объектах модели, что обеспечивает однократный ввод данных и простоту их корректировки. Устраняются возможности возникновения противоречивости хранимых данных. Хранимые данные могут использоваться совместно. Совместное использование предполагает не только то, что все данные существующих приложений интегрированы, но также и то, что новые приложения могут быть построены на той же самой базе данных. Централизованное управление обеспечивает соблюдение стандартов в представлении данных, принятых в данной предметной области. Могут быть выполнены условия безопасности данных. Обеспечивается целостность данных. Благодаря централизованному управлению, могут быть определены процедуры проверки, выполняющиеся при операциях запоминания. Обеспечивается независимость данных. В системе баз данных приложения (программы обработки) не зависят от данных. Это связано с тем, что в разных приложениях одни и те же данные требуется представлять по-разному. Различия могут существовать между представлением данных в приложениях и формой их физического хранения. Кроме того, должна быть возможность изменения структуры хранения или метода доступа без изменения существующих приложений. Сказанное выше подразумевает, что база данных может развиваться, не оказывая влияния на существующие приложения. Программное обеспечение, называемое системой управления базами данных (СУБД), поддерживает общий интерфейс между всеми пользователями и интегрированной базой данных. СУБД способствует обеспечению секретности и целостности данных, а также позволяет осуществлять контроль данных. Интерфейс СУБД с различными классами пользователей обычно обеспечивается широким диапазоном языков. Администратор базы данных (АБД) - это лицо (или группа лиц), ответственное за общее управление базой данных. Администратор базы данных является ответственным за анализ потребностей пользователей, проектирование базы данных, её внедрение, обновление, реорганизацию, а также за консультацию и обучение пользователей. Естественно, что администратору базы данных потребуются программные средства для выполнения этой работы, к которым относятся программы загрузки для создания первоначальной версии базы данных, программы реорганизации, программы восстановления. Важным инструментом администратора базы данных является словарь данных, содержащий «данные о данных». В словаре хранятся все схемы, процедуры проверки достоверности данных, проверки полномочий, а также может храниться информация о перекрестных ссылках, показывая связь программ с данными. 3. УРОВНИ ПРЕДСТАВЛЕНИЯ ДАННЫХ В настоящее время признаны три уровня абстракции для определения структуры базы данных: внутренний, концептуальный и внешний. Внутренний уровень близок к физической памяти, так как связан со способом физического хранения данных (с позиций системного программиста). Внешний уровень отражает представления прикладного программиста или конечного пользователя, так как связан с тем, как отдельные пользователи представляют эти данные. Концептуальный уровень можно представить себе определяющим обобщенное представление пользователей. Внутренняя модель есть представление самого низкого уровня всей базы данных. Основными компонентами физической базы данных являются физические блоки, хранимые записи, указатели, данные переполнения и промежутки между блоками. Взаимосвязи между хранимыми записями, возникающие в результате их группирования или использования индексных структур, являются частью физической структуры. Отдельного пользователя интересует только некоторая часть всей базы данных. Представление пользователя об этой части базы данных будет до некоторой степени абстрактным по сравнению с тем, как данные хранятся на физическом уровне. Другими словами можно сказать, что пользователь представляет базу данных посредством внешней модели. Внешняя модель является информационным содержанием базы данных в том виде, в каком его представляет конкретный пользователь. Внешняя модель определяется посредством внешней схемы, которая состоит из описаний всех типов внешних записей этой внешней модели. Определим представление данных на внешнем уровне как представление на уровне реализации. Представление реализации состоит из логических записей, составляющих их элементов данных и взаимосвязей записей. Наиболее часто применяются три модели данных: иерархическая сетевая и реляционная. С концептуальным уровнем представления данных согласуется понятие концептуальной модели. Концептуальная модель есть представление полного информационного содержания базы данных в абстрактной форме по сравнению со способом физического хранения данных. Это представление может полностью отличаться от представления данных отдельным пользователем. Другими словами, это представление данных скорее ближе к данным в том виде, как они есть, чем в том, какими их видят пользователи при обработке. Концептуальная модель состоит из множества экземпляров различных типов объектов и связей (концептуальных записей). Структура данных на концептуальном уровне называется концептуальной схемой или информационной структурой, которая включает определения каждого типа концептуальных записей. Она является проблемно-ориентированной и системно-независимой, то есть независимой от конкретной СУБД, операционной системы и аппаратного обеспечения компьютера. Концептуальная структура (или схема) содержит следующие компоненты: - элементарные данные предметной области, называемые объектами; - элементарные данные, описывающие объекты, называемые атрибутами; - ассоциации между экземплярами элементарных данных, называемые связями. Различают три типа бинарных связей между экземплярами объектов: - один-к-одному ( 1 : 1 ); - один-ко-многим ( 1 : M); - многие-ко-многим ( M : N ). Большинство связей предметной области могут быть представлены бинарными связями. Концептуальная схема должна поддерживать согласованность связей. 4. БАЗОВЫЕ ТИПЫ МОДЕЛЕЙ ДАННЫХ Основным компонентом системы базы данных является модель данных (концептуальная модель). Тип данных - это определение объектов, их инвариантных свойств (ограничений) и операций, допустимых над ними. Схему базы данных можно рассматривать как совокупность типов данных. Ограничения, определенные в схеме, могут использоваться для контроля данных того или иного типа. С этой точки зрения база данных - это совокупность значений данных, представляющих собой реализации типов, специфицированных в схеме. Модель данных можно охарактеризовать как совокупность категорий типов данных. Типы данных, соответствующие этим категориям, используются для представления атрибутов, типов объектов и связей реального мира. Категория определяется посредством других, базовых для нее категорий типов данных. Кроме того, в моделировании данных акцент делается на определении таких категорий типов данных, которые могли бы использоваться во многих ситуациях общего характера. Концепция типов данных полезна в моделировании данных с точки зрения получения абстракций и установления соотношений и связей между данными. Системы баз данных классифицируются в соответствии с выбранной моделью данных. Широкое распространение получили три типа моделей данных: иерархическая модель, сетевая модель и реляционная модель данных. Эти типы образуют некоторое «базовое» множество. Каждый из типов определяет соответствующую систему управления базами данных (СУБД). Выбор модели данных зависит от объема информации, сложности решаемых задач и имеющегося технического и программного обеспечения. Сетевая модель данных базируется на табличных и графовых представлениях. Вершинам графа соответствуют объекты, представленные таблицами, а дугам соответствуют связи между объектами. Ограниченность сетевой модели состоит в невозможности непосредственного представления связей между объектами типа «многие-ко-многим». Иерархическая модель данных представляется упорядоченным деревом. Отличие иерархической модели от сетевой состоит в том, что в иерархической модели любой объект может подчиняться только одному объекту вышестоящего уровня, а в сетевой любой объект может быть подчинен нескольким объектам. Реляционная модель данных базируется на отношениях и их представлении таблицами. Реляционная модель данных впервые была предложена Е. Коддом. Единственным средством структуризации данных в реляционной модели является отношение. Отношения обладают всеми свойствами множеств. Важнейшее свойство языков данных реляционной модели возможность определять новые отношения, основываясь на существующих отношениях и используя реляционную алгебру или реляционное исчисление. 5. РЕЛЯЦИОННАЯ МОДЕЛЬ ДАННЫХ Реляционная модель данных является совокупностью простейших двумерных таблиц отношений (объектов модели). В теории множеств таблице соответствует термин отношение (relation), который дал название модели. 5.1. Структура данных Таблица (table) является основным типом структуризации данных (объектом) реляционной модели. Структура таблицы определяется совокупностью столбцов. В каждой строке таблицы содержится по одному значению в соответствующем столбце. Такая таблица называется нормализованной. В таблице не может быть двух одинаковых строк. Общее число строк не ограничено. Строки таблицы представляют экземпляры объекта и называются записями (records). Столбцы таблицы представляют атрибуты объекта и называются полями (fields). В моделировании данных вводится понятие домена (однородного множества). Домены можно рассматривать как множества, из которых черпаются значения семантически значимых объектов и их свойств. Именованные домены, представляющие семантически значимые объекты, называются атрибутами. Атрибуты, определенные на общем домене, обладают одним и тем же свойством. Поле таблицы - столбец в прямоугольной таблице. Поле таблицы реализует понятие атрибута в реляционной модели, Дадим формальное определение отношения. Пусть даны N множеств D1, D2, ..., DN. Тогда R есть отношение над этими множествами, если R есть множество упорядоченных n-местных кортежей вида {d1, d2, ..., dn}, где d1 - элемент из D1, d2 - элемент из D2, ..., dn -элемент из DN. D1, D2, .,., DN называются доменами отношения R. Отношение R можно рассматривать как подмножество декартова произведения множеств D1, D2, ..., DN. Число доменов называется степенью или размерностью отношения. Текущее число кортежей в отношении называется мощностью или кардинальным числом. В качестве примера рассмотрим реляционную модель данных для предметной области Успеваемость студентов. Будем предполагать, что студент должен сдать экзамены по некоторым дисциплинам предметам. После сдачи очередного экзамена преподаватель заполняет направление, в котором указывается ФИО студента, название предмета и полученная студентом оценка. Ограничимся данными, представленными тремя таблицами (отношениями): Студенты, Предметы, Оценки. Таблица Студенты содержит следующие данные о каждом студенте: номер студента (номер зачетной книжки), фамилию и инициалы, номер группы, специальность, домашний адрес, телефон. Таблица Предметы содержит номер предмета и название предмета. Таблица Оценки содержит номер студента, номер предмета и оценку, полученную данным студентом по данному предмету. Реляционная модель данных описывается реляционной схемой, состоящей из одной или нескольких схем отношений. Схема отношения задается именем отношения и именем соответствующих атрибутов. Для описанной предметной области Успеваемость студентов реляционная схема описывается следующими схемами отношений: Студенты (Номер-студента, фамилия-имя-отчество, номер-группы, специальность, домашний адрес, телефон) Предметы (Номер-предмета, название предмета) Оценки (Номер-студента, номер-предмета, балл) Основным свойством реляционной модели данных является то, что связи между кортежами таблиц представлены значениями данных в столбцах. Отношения Студенты и Оценки имеют общий домен - номера студентов, отношения Предметы и Оценки имеют общий домен - номера предметов. Реляционная база данных описанной предметной области будет определяться таблицами соответствующих отношений и связями между ними. 5.2.Ограничения целостности Отношение отображают таблицей, каждая строка которой представляет кортеж. Количество столбцов таблицы равно степени отношения, а число строк - его мощности. Из того факта, что отношение есть множество, следует, что никакие два кортежа не совпадают и что упорядоченность кортежей несущественна. Это ограничение приводит к понятию ключа отношения. Ключ отношения - это подмножество атрибутов, совокупность значений которых однозначно идентифицирует кортеж. Каждое отношение имеет, по крайней мере, один ключ (состоящий из всех атрибутов). Это следует из того, что дублирование строк не допускается. Отношение может иметь и несколько ключей, называемых возможными ключами. Для того чтобы исключить тривиальные ключи потребуем, чтобы ключ обладал следующими двумя свойствами: С1) однозначность идентификации (значение ключа однозначно идентифицирует кортеж отношения); С2) неизбыточность (никакое подмножество атрибутов ключа не обладает свойством С1). Один из возможных ключей выбирается в качестве первичного ключа отношения. Первичный ключ не разрешается обновлять. Кроме того, первичный ключ не может принимать значения «не определено». Вторичный ключ - это такой ключ, значения которого могут повторяться в разных строках таблицы. По ним отыскивается группа строк с одинаковым значением вторичного ключа. Вторичный ключ называют ключом поиска. Связь - это логическое отношение между объектами, выражающее некоторое ограничение или правило. В реляционной модели вводится понятие реляционной связи (relation) - это связь между записями, основанная на совпадении значений атрибутов, по которым устанавливается связь. Внешний ключ — атрибут или комбинация атрибутов некоторого объекта, соответствующие первичному ключу другого объекта, связанного с данным. Иначе говоря, внешний ключ одного объекта представляет собой уникальный идентификатор записи в другом объекте, с которым данный объект связан реляционным отношением. Для логической связи одной таблицы-отношения, например, R1 с другой таблицейотношением R2 (назовем её главной), таблица R1 должна содержать внешний ключ. Внешним ключом подчиненной таблицы R1 является вторичный ключ этого отношения, который в то же время является первичным ключом в главной таблице. Такие одинаково определенные атрибуты в разных отношениях являются средством логической связи между записями разных таблиц и играют роль ключа связи. Схема данных — представление набора всех объектов, входящих в данную модель, и связей между ними. Целостность данных — это система правил, используемых для поддержания связей между записями в связанных таблицах. Большинство конкретных реляционных моделей данных предусматривает средства спецификации явных ограничений целостности, накладываемых на отношения. Например, для атрибута можно задать домен сравнимости, применяемый для указания осмысленности сравнения значений. Поддержка целостности данных - предотвращение некорректного изменения данных в связанных таблицах, нарушающего установленное отношение между ними. Например, если из таблицы Студенты удаляется запись, соответствующая некоторому студенту, то необходимо предусмотреть удаление всех записей, соответствующих этому же студенту из таблицы Оценки. Возможны ограничения на область значений атрибута. Более общие ограничения могут быть заданы посредством утверждений. Утверждения - это предикаты, определяющие условия, которым должна удовлетворять база данных при изменении ее состояния. 5.3. Операции над данными Операции обработки данных включают операции над строками таблиц и операции над таблицами (отношениями). Операции над строками - это включение (добавление), удаление, обновление (изменение), то есть операции редактирования. Основными операциями над отношениями реляционной модели данных являются традиционные операции над множествами: объединение, пересечение, разность (вычитание), декартово произведение, а также специальные операции: выбор, проекция, соединение и деление множеств. Для любой из этих операций результат обработки - новая таблицаотношение. Специальные операции над отношениями Выбор - операция выполняется над одним отношением R. Для отношения R по заданному условию осуществляется выборка подмножества кортежей. Результирующее отношение имеет ту же структуру, что и R, но число его кортежей будет меньше или равно исходному. Например, для отношения Студенты в реляционной базе данных Успеваемость студентов можно в качестве условия выбора задать конкретное значение для атрибута «специальность», тогда результирующее отношение будет содержать только те кортежи (строки) из таблицы Студенты, в которых этот атрибут (столбец) будет иметь заданное значение. Проекция - операция выполняется над одним отношением, например, R. Операция проекции формирует новое отношение (например, RPR) с заданным подмножеством атрибутов исходного отношения R. Оно может содержать меньше кортежей, так как после отбрасывания в исходном отношении R части атрибутов (при возможном исключении первичного ключа) могут образоваться кортежи, дублирующие друг друга. Дублирующие кортежи из результирующего отношения исключаются. Например, если выполнить проекцию отношения Студенты в реляционной базе данных Успеваемость студентов по атрибуту «специальность», тогда результирующее отношение будет содержать только один атрибут «специальность» и количество кортежей в нем будет равно количеству различных значений атрибута «специальность» из таблицы Студенты. Можно выполнить проекцию отношения по двум и более атрибутам. Например, для отношения Студенты можно выполнить проекцию этого отношения по двум атрибутам: «номер-группы» и «специальность». Соединение выполняется для заданного условия соединения над двумя логически связанными отношениями. Исходные отношения, например, R1 и R2 имеют разные структуры, в которых есть одинаковые атрибуты - внешние ключи (ключи связи). Операция соединения формирует новое отношение, структура которого является совокупностью всех атрибутов исходных отношений. Результирующие кортежи формируются объединением каждого кортежа из R1 с теми кортежами R2, для которых выполняется условие. Условием, как правило, является значение внешнего ключа в исходных отношениях. Например, можно выполнить соединение над двумя отношениями Студенты и Оценки реляционной базы данных Успеваемость студентов по атрибуту «номер-студента»; тогда в результирующем отношении каждая запись из таблицы Студенты соединиться поочередно с каждой записью из таблицы Оценки, имеющей то же самое значение атрибута «номерстудента», что и запись в таблице Студенты. Деление — операция выполняется над двумя отношениями R1 и R2, имеющими в общем случае разные структуры и некоторые одинаковые атрибуты. В результате операции образуется новое отношение, структура которого получается исключением из множества атрибутов отношения R1 множества атрибутов отношения R2. Результирующие строки не должны содержать дубликаты. Перечисленные операции в той или иной мере реализуются в средствах СУБД, обеспечивающих обработку реляционных таблиц. Язык SQL, реализованный в большинстве СУБД, содержит все перечисленные операции и полный набор операций над строками (включить, удалить, обновить), а также арифметические операции и операции сравнения. Язык SQL относится к непроцедурным языкам, в основу которых взята конструкция «предложение», а не конструкция «оператор», использующаяся в алгоритмических процедурных языках. Следует отметить, что в литературе по языку SQL чаще всего используется термин «оператор» или «инструкция». Операторы (предложения) SQL разбиты на три категории в соответствии с их функциями: - язык описания данных (ЯОД), который используется для описания схем отношений; - язык манипулирования данными (ЯМД), который используется для формирования запроса и поиска данных в таблицах и для редактирования данных; - операторы защиты и управления данными, которые используются для поддержания целостности базы данных; обычно эти операторы рассматриваются как часть ЯОД. Опишем на ЯОД реляционную схему предметной области Успеваемость студентов: CREATE TABLE S ( Ns (NUMERIC(3,0)), Fio (CHAR(20)), Ngr (NUMERIC(1,0)), Spec (CHAR(4)), Addr (CHAR(30)), Tel (CHAR(8))) CREATE TABLE P ( Np (NUMERIC(2,0)), Nazv(CHAR(20))) CREATE TABLE S_P ( Ns (NUMERIC(3,0)), Np (NUMERIC(2,0)), Ball (NUMERIC(1,0))) 5.4. Язык запросов SQL Язык SQL был разработан в 1970 году в компании IBM. SQL - это аббревиатура от английских слов Structured Query Language (Структурированный Язык Запросов). Язык SQL является подъязыком данных, который предназначен для взаимодействия с базой данных, то есть язык SQL - это язык запросов. Запрос - это операция над отношениями, результатом которой также является отношение. Система запросов - это формальная система для выражения запросов. Система запросов образует структуру языков запросов, то есть специализированных языков программирования, которые используются в системах баз данных для формулировки команд. Язык запросов должен иметь набор выразительных средств, чтобы отвечать на широкий круг запросов и формулировать их кратко. Реляционные языки запросов классифицируются следующим образом: • языки реляционной алгебры; • языки реляционного исчисления; • графические языки; • языки отображения. Реляционные языки запросов определяются как спецификационные языки, основными свойствами которых являются полнота, точность и понятность. Следует отметить, что «спецификация описывает, ЧТО надо получить, а не КАК получить», то есть спецификация не должна быть процедурной, динамической, а должна быть декларативной (непроцедурной), статической. Языки реляционной алгебры относятся к процедурным языкам, остальные языки относятся к непроцедурным языкам (языкам высокого уровня). Теоретические основы первых двух классов языков были заложены трудами Кодда. Языки реляционной алгебры основываются на алгебре отношений, языки реляционного исчисления - на логике предикатов первого порядка. Графические языки предназначены для работы с дисплеем. Пользователь выражает свой запрос специальными терминами на экране дисплея. Примером графического языка является язык QBE (Query by Example), реализованный в большинстве реляционных СУБД. Язык SQL относится к языкам отображений. Основной операцией в языке SQL является отображение, синтаксически представляющее собой блок SELECT - FROM - WHERE (выбрать - из - где). Приведем синтаксис предложения SELECT: SELECT < список полей таблиц > FROM < список имен таблиц > [ WHERE < логическое выражение > ] Ключевые слова (ключевые параметры) SELECT, FROM являются обязательными, параметр WHERE не является обязательным. Будем обсуждать такие параметры по мере их необходимости. Рассмотрим описание запросов на языке SQL для конкретной предметной области Успеваемость студентов. Простая выборка Запрос 1. Получить полные сведения обо всех студентах. SELECT * FROM S Символ * означает, что в результирующем отношении будут присутствовать все атрибуты отношения S. Запрос 2. Получить все номера сданных предметов. SELECT UNIQUE Np FROM NS_P В SQL не предусматривается исключение одинаковых строк из результата, если пользователь не потребует этого, задав ключевой параметр UNIQUE. Отметим, что операция исключения одинаковых строк может требовать дополнительных затрат. Выборка по условию Запрос 3. Получить номера тех студентов, которые имеют по предмету с номером 2 оценку 5. SELECT Ns FROM S_P WHERE Np = 2 AND Ball = 5 Логическое выражение после параметра WHERE строится так же, как в алгоритмических языках. Выборка с упорядочением Запрос 4. Получить номера и фамилии студентов группы с номером, равным 1 (фамилии должны следовать в лексикографическом порядке). SELECT Ns, Fio FROM S WHERE Ngr = 1 ORDER BY Fio DESC Параметр DESC предполагает упорядочение по возрастанию значений в столбце, ASC упорядочение по убыванию значений в столбце. Выборка с использованием вложенного отображения Запрос 5. Получить список фамилий тех студентов, которые сдали пpедмет с номером 2. SELECT Fio FROM S WHERE Ns IS IN ( SELECT Ns FROM S_P WHERE Np = 2 ) Параметр IS IN предполагает проверку принадлежности множеству, полученному после выполнения внутреннего SELECT- FROM - WHERE. Параметр IS NOT IN интерпретируется как «не принадлежит множеству». Выборка с использованием нескольких уровней вложенности Запрос 6. Получить список фамилий тех студентов, которые сдали пpедмет с названием «Мат.анализ». SELECT Fio FROM S WHERE Ns IS IN ( SELECT Ns FROM S_P WHERE Np IS IN ( SELECT Np FROM P WHERE Nazv=' Мат.анализ')) Выборка с использованием вложенного отображения к одной и той же таблице Запрос 7. Получить номера тех студентов, которые сдали тот же предмет, что и студент с номером 13. SELECT UNIQUE Ns FROM S_P WHERE Np IS IN ( SELECT Np FROM S_P WHERE Ns = 13 ) Выборка с использованием синонима Запрос 8. Получить номера всех предметов, которые сданы несколькими студентами. SELECT UNIQUE Np FROM S_P SPr WHERE Np IS IN ( SELECT Np FROM S_P WHERE SPr.Ns <> Ns ) Выборка более чем из одной таблицы Запрос 9. Для каждого номера предмета получить фамилии студентов, которые его сдали. SELECT Np,Fio FROM S_P , S WHERE S_P.Ns = S.Ns Это предложение языка SQL аналогично операции соединения. Существенное различие заключается в том, что фактически соединения S_P и S не происходит, а значит, память на соединение не расходуется. Выборка, включающая сравнение множеств Запрос 10. Получить список фамилий тех студентов, которые сдали все предметы. SELECT Fio FROM S WHERE ( SELECT Np FROM S_P WHERE Ns = S.Ns ) ( SELECT Np FROM P ) Выборка, включающая GROUP BY, HAVING и SET Запрос 11. Получить номера тех студентов, которые сдали все предметы, что и студент с номером 13. SELECT Ns FROM S_P GROUP BY Ns HAVING SET (Np) CONTAINS (SELECT Np FROM S_P WHERE Ns = 13) Параметр CONTAINS означает «содержит». Параметр GROUP BY разделяет рассматриваемую таблицу на такие группы, что внутри любой из этих групп все строки содержат одинаковые значения в указанном столбце. Затем действует фраза HAVING, являющаяся специальной формой фразы WHERE, но относящаяся не к отдельным строкам, а к группам: Предикат во фразе HAVING всегда ссылается на свойства групп и на основе этого предиката группы целиком либо выбираются, либо отбрасываются. Значением функции SET становится множество значений, содержащихся определенном столбце (столбцах) внутри заданной группы. Операции редактирования Для включения новой строки используется предложение INSERT, например: INSERT INTO P : < 11, 'Информатика' > Для удаления строки используется предложение DELETE, например: DELETE S WHERE Ns = 13 После выполнения этого предложения из таблицы S будет удалена строка с номером студента, равным 13. После выполнения предложения DELETE P таблица P станет пустой. Для изменения значения в заданной строке используется предложение UPDATE, например: UPDATE S SET Ngr = 2 WHERE Ns = 13 После выполнения этого оператора у студента с номером 13 номер группы станет равным 2. Библиотечные функции В языке SQL существуют следующие библиотечные функции: COUNT- для получения общего количества строк отношения; SUM - для суммирования в значений в столбце отношения; AVG - для получения среднего арифметического значения в столбце; МАХ - для получения максимального значения в столбце; MIN - для получения минимального значения в столбце. Запрос 12. Получить количество студентов, сдавших предмет с номером, равным 5. SELECT COUNT ( Ns ) FROMS P WHERE Np = 5 Запрос 13. Получить средний балл по предмету с номером 5. SELECT AVG ( Ball ) FROM S_P WHERE Np = 5 Запрос 14. Получить номера студентов, сдавших больше 5 предметов. SELECT Ns FROM S_P GROUP BY Ns HAVING COUNT ( Np ) > 5 5.4. Преимущества хранения данных в РБД Преимуществами хранения данных в реляционной базе данных являются следующие: - каждый элемент данных хранится только в одной таблице ( экономия места); - внесение изменений упрощается, уменьшается риск ошибки ( напри мер, в написании фамилий); - наличие связей между таблицами ускоряет обработку взаимосвязан ной информации; - ошибочные записи ( с некорректными ссылками ) должны автомати чески исключаться. 6. С Р Е Д С Т В А С У Б Д Техническим возможностям персональных компьютеров в настоящее время лучше всего соответствуют реляционные СУБД. Основными средствами СУБД являются: - средства задания (описания) структуры объектов базы данных; - средства конструирования экранных форм, предназначенных для ввода данных, просмотра и их обработки в диалоговом режиме; - средства создания запросов для выборки данных при заданных условиях, а также выполнения операций по их обработке; - средства создания отчетов для вывода на печать результатов обработки в удобном для пользователя виде; - языковые средства - макросы, встроенный алгоритмический язык, язык запросов и др., что позволяет реализовать нестандартные алгоритмы об работки данных; - средства создания приложений пользователя (генераторы приложений, средства создания меню и панелей управления приложениями), позволяющие объединить различные операции работы с базой данных в единый технологический процесс; - средства защиты и восстановление данных при аварийных ситуациях, аппаратных и программных сбоях, ошибках пользователя; - защита данных от несанкционированного доступа средствами разграничения доступа для различных пользователей; - возможность модификации структуры базы данных без повторной загрузки данных; - обеспечение независимости программ от данных, позволяющей сохранить программы при модификации структуры базы данных; - наличие языка запросов высокого уровня, который обеспечивает вывод информации по любому запросу и представлению ее в виде отчетных форм. СЛОВАРЬ ТЕРМИНОВ Администрирование базы данных - сопровождение базы данных в процессе разработки, эксплуатации и добавления приложений; включает также создание и необходимую реорганизацию базы данных, создание резервных копий базы данных, назначение пользователям паролей и санкций доступа к базе данных. Атрибут - информация, описывающая объект и служащая его идентификатором (поименованная характеристика объекта). В записи данных атрибут представлен типом элемента данных. База данных - совокупность данных, организованная по определенным правилам, предусматривающим общие принципы описания, хранения и манипулирования данными; не зависит от прикладных программ. Безопасность данных - защита данных от преднамеренного или непреднамеренного нарушения секретности, искажения или разрушения данных. Внешний ключ - одно или несколько полей в таблице, которые соответствуют первичному ключу другой таблицы. Внешняя схема — представление данных с позиции прикладного программиста, логическая структура базы данных. Внутренняя схема — физическая структура базы данных; представление данных с позиции вычислительной системы, как они выглядят на запоминающем устройстве. Данные - информация, представленная в определенной форме, пригодной для последующего хранения и обработки. Домен — область определения значений одного столбца отношения. Запрос — операция над отношениями, результатом которой также является отношение. Инструкция SQL — предложение на языке структурированных запросов (SQL), представляющее собой запрос для выборки или обработки данных. Информация — сведения об окружающем мире и протекающих в нем процессах. Ключ — совокупность атрибутов, значения которых однозначно определяют кортеж в отношении. Концептуальная схема - высокоуровневое представление администратора базы данных и пользователя о данных, обычно в виде объектов и связей. Модель данных - представление о предметной области в виде данных и связей между ними. Независимость данных - возможность изменения структуры базы данных без изменения пользующихся ею прикладных программ. Объект - нечто, о чем хранится информация. Ограничения целостности — определяемые моделью данных или задаваемые схемой базы данных ограничения, обеспечивающие внутреннюю непротиворечивость хранимой информации. Отношение — конечное множество кортежей из допустимых значений атрибутов схемы отношения. Отношение ассоциируется с таблицей, имена атрибутов - с именами столбцов таблицы, кортежи - со строками таблицы. Отображение - реляционная операция языка SQL. Первичный ключ - один или несколько столбцов (атрибутов), которые однозначно идентифицируют каждую запись в таблице. Предметная область — часть реального мира, подлежащая изучению с целью организации управления и автоматизации. Реляционная база данных (РБД) — совокупность отношений конкретной предметной области. Предполагается, что отношения логически связаны между собой. Реляционная СУБД — СУБД, базирующаяся на реляционной модели данных. Реляционные операции — набор операций манипулирования данными, операндами которых являются отношения; результатом любой реляционной операции является также отношение. Связь — ассоциация между экземплярами примитивных или агрегированных объектов (записей) данных (например, 1 : 1, 1 : M, M : N). Система управления базами данных — комплекс программных и языковых средств, предназначенных для создания, ведения и использования баз данных. Словарь данных — каталог всех типов элементов в базе данных, включающий для каждого типа его определение, формат, источник и применение. Широко распространены автоматические словари данных. Структура данных — способ объединения нескольких элементов данных в один. Структура хранения - описание способа организации физического хранения данных в системе: указатели, представление знаков, плавающая запятая, блокирование, метод доступа т.д. Схема данных — графическое или формальное описание логической структуры базы данных. Схема отношения — совокупность имен атрибутов, определяющих объект. Схема реляционной базы данных — совокупность схем отношений приложения. Тип данных — множество операций, характеризующих определенное множество значений. Транзакция — группа операций над данными, логически рассматриваемая как одна операция и сохраняющая целостность базы данных. Целостность базы данных — свойство базы данных, при выполнении которого база данных содержит полную и непротиворечивую информацию, необходимую и достаточную для корректного функционирования приложений; это свойство сохраняется при всех манипуляциях с данными. Целостность данных — система правил, используемых для поддержания связей между записями в связанных таблицах. Язык SQL — язык структурированных запросов для выборки, изменения и удаления данных из таблиц базы данных. СУБД ACCESS 1 СХЕМА РАБОТЫ С СУБД ACCESS Microsoft Access – программа для создания и редактирования баз данных, которая входит в состав пакета офисных программ Microsoft Offiсe. Каждая конкретная система управления базами данных (СУБД) имеет свои особенности, которые необходимо учитывать. Однако, имея представление о функциональных возможностях любой СУБД, можно представить обобщенную схему работы пользователя в этой среде. В качестве основных этапов работы с СУБД можно выделить следующие: − создание структуры таблиц базы данных; − ввод и редактирование данных в таблицах; − обработка данных, содержащихся в таблицах; − вывод информации из базы данных. Средствами Access проводятся следующие операции. 1 Проектирование базовых объектов ИС – двумерных таблиц, с разными типами данных, включая поля объектов OLE (т.е. объектов, созданных другими приложениями). 2 Установление связей между таблицами, с поддержкой целостности данных, каскадного обновления и удаления записей. 3 Ввод, хранение, просмотр, сортировка, модификация и выборка данных из таблиц с использованием различных средств контроля информации, индексирования таблиц и аппарата логической алгебры (для фильтрации данных). 4 Создание, модификация и использование производных объектов ИС (форм, запросов и отчетов), с помощью которых в свою очередь выполняются следующие операции: – оптимизация пользовательского ввода и просмотра данных (формы); – соединение данных из различных таблиц; проведение групповых операций (т.е. операций над группами записей, объединенных каким-то признаком), с расчетами и формированием вычисляемых полей; отбор данных с применением аппарата логической алгебры (запросы); – составление печатных отчетов по данным, которые содержатся в таблицах и запросах базы данных (БД). MS Access обладает мощными, удобными и гибкими средствами проектирования объектов. Это дает возможность пользователю при минимуме предварительной подготовки довольно быстро создать полноценную ИС – на уровне таблиц, форм, запросов-выборок и отчетов. Запуск и завершение работы с Access осуществляется любым из стандартных способов, предусмотренных в среде Windows (Ссылка на приложение Microsoft Access обычно находится в одном подчиненных меню пункта Главного меню Windows). Объектом обработки MS Access является файл базы данных, имеющий произвольное имя и расширение .MDB. В этот файл входят основные объекты MS Access: таблицы, формы, запросы, отчеты, макросы и модули. После загрузки Access ожидает от вас одного из следующих распоряжений: – либо создать новую базу данных; – либо открыть существующую базу данных. Создание БД. После выбора команды Файл>Создать, на экране появляется стандартное окно, в котором надо указать имя и адрес создаваемой базы данных. Создав файл, Access раскрывает пустое окно базы данных, и в этом окне будут проводиться все операции над объектами БД. Открытие БД. После выбора команды Файл>Открыть, на экране появляется стандартное окно, в котором необходимо указать имя и адрес существующего файла базы данных. После чего раскрывается окно базы данных, которое обеспечивает доступ к уже созданным объектам БД и возможность создавать новые объекты. MS Access является многооконным приложением, однако в любой момент может быть открыта только одна база данных. Именно ее окно является главным окном документа в приложении Access. Однако это окно порождает множество дочерних окон (таблицы, запроса, формы, отчета и т. д.), и каждое такое окно может быть закрыто автономно (любым из стандартных способов Windows). Кроме того, не закрывая окна, можно сохранить объект, окно которого находится на экране, и присвоить ему имя, – точно так же, как это делается с файлами: командой Файл>Сохранить или Файл>Сохранить как. 2 ОБЪЕКТЫ MS ACCESS Access работает со следующими объектами: − таблицами; − формами; − запросами; − отчетами; − макросами; − модулями; − страницами доступа Интернет (только начиная с Access 2000). Макрос – это набор специальных макрокоманд (например, ОткрытьФорму, ПечататьОтчет и т. п.). Модуль – это программа, написанная на языке Access Basic или VBA. Таблица является базовым объектом MS Access. Все остальные объекты являются производными и создаются на базе ранее подготовленных таблиц. Форма не является самостоятельным объектом Access: она помогает вводить, просматривать и модифицировать информацию в таблице или запросе. Запросы и отчеты выполняют самостоятельные функции: выбирают, группируют, представляют, печатают информацию. Каждый объект MS Access имеет имя. Длина имени любого объекта MS Access (таблицы, формы и т. д.) не более 64 произвольных символов (за исключением точки и некоторых служебных знаков). В имя могут входить пробелы и русские буквы. Работа с каждым объектом проводится в отдельном окне, причем предусмотрено два режима работы: 1) оперативный режим – когда в окне решаются задачи ИС, т. е. просмотр, изменение, выбор информации; 2) режим конструктора – когда создается или изменяется макет, структуру объекта. Кроме этого, в файл базы данных входит еще один документ, имеющий собственное окно: Схема данных. В этом окне создаются, просматриваются, изменяются и разрываются связи между таблицами. Эти связи помогают контролировать данные, создавать запросы и отчеты. 3 ОКНО ПРИЛОЖЕНИЯ ACCESS И ОКНО БАЗЫ ДАННЫХ В окне базы данных (рис 5.7.1) расположены три командные кнопки (Создать, Открыть и Конструктор) и вкладки (по числу объектов Access) с корешками: Таблица, Запрос, Форма, Отчет, Макрос и Модуль. Рис. 1 Если выбрана вкладка Таблица, в окне этой вкладки отображается список существующих таблиц данной БД. Чтобы открыть существующую таблицу, надо выделить ее имя в этом списке и нажать кнопку Открыть. Чтобы включить в БД новую таблицу, надо нажать кнопку Создать. Чтобы исправить макет существующей таблицы, надо выделить ее имя в списке и нажать кнопку Конструктор. Такие же операции выполняются со всеми другими объектами Access. Типы данных в MS Access В MS Access допускаются следующие типы данных: 1) текстовый – произвольная последовательность символов длиной до 255. Используется для текста и чисел не участвующих в вычислениях; 2) числовой – любое число. Используется для чисел; 3) денежный – число, обрабатываемое с повышенной точностью; 4) дата/время – используется для дат (в диапазоне лет от 100 до 9999) и времени суток; 5) логический (TRUE или FALSE); 6) счетчик – используется для автоматической последовательности идентификации записей; 7) поле MEMO – используется для аннотации (текст и числа); 8) поле объекта OLE – объект OLE, внедренный в базу данных Access. 4 СОЗДАНИЕ ОБЪЕКТОВ В MS ACCESS Любой объект (таблицу, запрос, форму, отчет) можно создать либо вручную (с помощью режима Конструктора), либо с помощью Мастера. Самый быстрый способ создания объектов возможен с помощью Мастера. Этот способ позволяет создавать новые объекты на базе одного или нескольких готовых объектов. При работе с мастером необходимо лишь следовать его указаниям. Рассмотрим последовательность шагов при создании в базе данных новой таблицы с помощи Конструктора. 1 В окне базы данных щелкните на вкладке Таблицы, а затем на кнопке Создать. В окне диалога Новая таблица выберите вариант Конструктор, после чего щелкните на кнопке ОК. 2 В столбце Имя поля введите имя нового поля, нажмите клавишу Tab и укажите для него тип в столбце Тип данных. 3 В столбце Описание введите информацию, которая будет отображаться в строке состояния, когда точка вставки располагается в этом поле таблицы. На вкладке Общие укажите Размер поля, т.е. число символов; Формат поля и Маску ввода, т.е. метод отображения и допустимые символы; Подпись для режима таблицы; Значение по умолчанию, Условие на значение и другие свойства. Для текстового и числового поля желательно указать размер поля, иначе размер поля будет максимально допустимым для данного типа, что скажется не в лучшую сторону на скорости работы с базой данных. Для поля Дата/время обязательно надо указать формат, чтобы система знала, как обрабатывать вводимые данные. Например, если выбрать Краткий формат даты, система будет ожидать от вас ввода именно даты (в русской версии – ДД.ММ.ГГГГ), а если выбрать Краткий формат времени, в этом поле придется набирать ЧЧ:ММ (часы и минуты). В качестве значения свойства Условие на значение вы можете указать правило верификации, т.е. логическое выражение, которое должно принимать значение TRUE (Истина) при вводе данных в это поле. В свойстве Обязательное поле можно указать Да (пустые значения не допускаются) или Нет (пустые значения допускаются). 4 Щелкните на первой пустой строке таблицы полей и создайте следующее поле базы данных, затем повторите действия 2 и 3. Чтобы вставить поле между двумя существующими, щелкните на кнопке Добавить строки панели инструментов Конструктор таблиц. 5 Чтобы выделить то поле таблицы, которое нужно сделать ключевым, щелкните на селекторе, расположенном левее имени поля. После этого нужно щелкнуть на кнопке Ключевое поле панели инструментов. 6 Щелкните на кнопке Сохранить панели инструментов Конструктор таблиц, введите имя в текстовое поле Имя таблицы окна диалога Сохранение, после чего щелкните на кнопке ОК. Access создаст новую таблицу и запишет ее на диск. Работа с таблицей. После того, как таблица создана, ее необходимо заполнить данными. Ввод данных в таблицу или форму осуществляется так же, как и ввод данных в лист Excel или таблицу Word. 1 Откройте форму или таблицу и перейдите к нужной записи. Если необходимо создать новую запись, щелкните на кнопке Новая запись панели инструментов. 2 Введите данные в поле. Если необходимо добавить объект OLE, вставьте данные из другого источника или дайте команду Объект меню Вставка и выберите тип объекта и его имя в соответствующих окнах диалога. Если данные являются элементами предопределенного набора, выбирайте нужный вариант в раскрывающемся списке. 3 Нажмите клавишу Tab для перехода к следующему полю. Повторяйте действие 2 и нажимайте Tab для каждого поля. При необходимости перехода к предыдущему полю нажмите клавиши Shift+Tab. По достижении последнего поля записи очередное нажатие клавиши Tab переместит точку ввода в первое поле следующей записи. Если вам не нравится ширина столбца таблицы (например, она слишком велика или, наоборот, мала и скрывает часть данных), ее можно уменьшить или увеличить, точно так же, как вы изменяли ширину столбца в Excel. Перемещение па таблице. В строке состояния указывается общее число записей в таблице и номер текущей записи. Текущая запись отмечается стрелкой в левой части окна (в области маркировки записей). Для перемещения по таблице служат кнопки переходов в строке состояния (слева направо, пере- ход к первой записи таблицы, к предыдущей записи, к следующей записи и к последней записи таблицы). Чтобы переместить текстовый курсор в произвольную ячейку таблицы, можно просто щелкнуть на ячейке мышью. Кроме того, по таблице можно перемещаться с помощью клавиш Tab, Shift+Tab, стрелок курсора. Редактирование таблицы. При вводе данных используется основной стандарт редактирования. Закончив ввод или модификацию данных в конкретном поле, нажмите Tab или Enter (или щелкните мышью в другой ячейке таблицы). Для ввода (внедрения) объекта OLE надо щелкнуть правой кнопкой на его поле и выбрать OLEсервер из списка. (После внедрения OLE-объекта отображаемым в таблице значением его поля будет название соответствующего OLE-сервера (например, Microsoft Word). Чтобы просмотреть или отредактировать объект (или, скажем, чтобы воспроизвести звукозапись) надо, как всегда, дважды щелкнуть на этом названии). Фильтр. Работая с таблицей в оперативном режиме, вы можете установить фильтр, т.е. задать логическое выражение, которое позволит выдавать на экран только записи, для которых это выражение принимает значение TRUE ("Истина"). Фильтр набирается в окне фильтра. Чтобы установить (или изменить фильтр), выберите команду Записи > Изменить фильтр..., отредактируйте фильтр и выберите команду Записи > Применить фильтр. Чтобы восстановить показ всех записей, выберите команду Записи > Показать все записи. Операции с записями и столбцами. С помощью команд меню и кнопок панели инструментов вы можете проводить множество стандартных операций с записями и столбцами: вырезать и копировать в буфер, удалять записи, скрывать столбцы и т.д. 5 СВЯЗЬ МЕЖДУ ТАБЛИЦАМИ И ЦЕЛОСТНОСТЬ ДАННЫХ Между одноименными полями двух таблиц в MS Access можно устанавливать связь. Это означает, что при формировании запроса к этой паре таблиц Access сможет объединить строки таблиц, в которых значения поля совпадают. В общем случае допускается связь по двум, трем и более одноименным полям (кроме того, Access позволяет вручную установить связь между таблицами по разноименным полям, однако этой возможностью лучше не пользоваться). Целостность данных. Итак, если установлена связь между двумя таблицами (автоматически или вручную), данные из обеих таблиц можно объединять. Иногда этого достаточно, однако при создании серьезных баз данных придется позаботиться о дополнительных средствах контроля связанных данных, вводимых в разные таблицы. Механизм, который обеспечивает согласованность данных между двумя связанными таблицами, называется так: поддержка целостности данных. Если пользователь включил механизм поддержки целостности, он должен одновременно указать тип связи: Один-к-Одному или Один-ко-Многим. Целостность данных означает: 1) в связанное поле подчиненной таблицы можно вводить только те значения, которые имеются в связанном поле главной таблицы; 2) из главной таблицы нельзя удалить запись, у которой значение связанного поля совпадает хотя бы с одним значением того же поля в подчиненной таблице. При попытке нарушить эти запреты, MS Access выдает сообщение об ошибке. Каскадное обновление и удаление записей. Включив механизм поддержки целостности, вы можете (но не обязаны) потребовать, чтобы при модификации данных система запускала следующие процессы: • каскадное обновление связанных полей; • каскадное удаление связанных записей. Каскадное обновление означает, что изменение значения связанного поля в главной таблице автоматически будет отражено в связанных записях подчиненной таблицы. Каскадное удаление означает, что при удалении записи из главной таблицы, из подчиненной таблицы будут удалены все записи, у которых значение связанного поля совпадает с удаляемым значением. Порядок создания связей между таблицами. Когда между двумя таблицами устанавливается связь, величины одной таблицы ставятся в соответствие величинам из другой таблицы. Чтобы создать связь, в одной или обеих таблицах должно быть поле, принимающее уникальные значения во всех записях. В родительской таблице поле связи обычно индексировано (как правило, оно является ключевым полем), и в соответствие ему ставится поле дочерней таблицы (оно называется внешний ключ). Создавая связь, необходимо в окне диалога Связи настроить режим обеспечивая целостности данных. Обеспечение целостности позволяет избежать наличия несвязанных данных в дочерней таблице, которые образуются в том случае, когда для какой-либо записи нет соответствия в поле родительской таблицы. Если установлен флажок Каскадное обновление связанных полей, то при изменении величины связанного поля в родительской таблице изменяются величины полей и во всех соответствующих записях дочерней таблицы. Если установлен флажок Каскадное удаление связанных записей, то при удалении записи в родительской таблице будут удалены и соответствующие записи в дочерней таблице. Если эти флажки не были установлены, а обеспечение целостности данных, тем не менее, было включено, то вы не сможете изменить идентификационное поле родительской таблицы, а также не сможете удалить в ней запись, если в дочерней таблице имеются связанные с этой записью данные. Для создания связей между таблицами необходимо выполнить следующие действия. 1 Активизировав окно базы данных, щелкните на кнопке Схема данных панели инструментов, чтобы открыть окно Схема данных или выполните команду Сервис>Схема данных. 2 Щелкните на поле родительской таблицы и с помощью мышки "дотяните" связь от него до поля дочерней таблицы. 3 Откроется окно диалога Связи. В его нижней половине при необходимости включите режим обеспечения целостности данных и настройте правила обновления дочерней таблицы. 4 Для завершения процесса создания связи щелкните на кнопке ОК и закройте окно Схема данных. Связь отображается в виде линии, соединяющей две таблицы. Любую связь можно выделить и удалить нажатием клавиши Delete. Кроме того, можно щелкнуть на линии правой кнопкой мыши, чтобы раскрыть контекстное меню, а затем выбрать команду Изменить связь, чтобы открыть окно диалога Связи. Кнопка окна диалога Связи позволяет настроить тип объединения. Можно щелкнуть на этой кнопке, чтобы настроить для запросов применяемый по умолчанию метод объединения. 6 ЗАПРОС-ВЫБОРКА В MS ACCESS В общем случае запрос – это вопрос о данных. Существуют разные типы запросов (на добавление записей, изменение, объединение), рассмотрим наиболее употребляемый запрос-выборку. Запрос-выборка – это производная таблица, которая содержит те же структурные элементы, что и обычная таблица (столбцы-поля и строки), и формируется на основе фактических данных системы. При создании макета запроса (т.е. производной таблицы) в общем случае необходимо выполнить четыре базовые операции: 1) указать системе, какие поля и из каких таблиц мы хотим включить в запрос; 2) описать вычисляемые поля, т.е. поля, значения которых являются функциями значений существующих полей; 3) описать групповые операции над записями исходных таблиц (например, нужно ли объединить группу записей с одним и тем же кодом клиента в одну и просуммировать стоимость заказанной им продукции); 4) указать условие отбора, т.е. сформулировать логическое выражение, которое позволит включить в выборку только записи, удовлетворяющие какому-то условию. В общем случае для создания произвольного запроса используется универсальный язык SQL. Однако в реальности пользоваться этим языком могут только специалисты (или очень грамотные пользователи). А для обычных пользователей разработчики предложили упрощенный механизм создания запроса, называемый QBE (Query By Example – Запрос по образцу). Вам предлагают бланк QBE – некую модель, заготовку запроса, и на этом бланке, пользуясь определенными соглашениями, вы сообщаете системе о своих планах: помечаете поля, вводите выражения, значения и т.п. На основании заполненного вами бланка система сама выполняет запрос. Создать новый запрос можно либо с помощью мастера Создание простых запросов, либо в окне конструктора запросов. Оба эти способа достаточно просты, однако мастер Создание простых запросов выполняет пошаговое формирование запроса. Мастер позволяет настроить дополнительные параметры. Создание запроса на выборку с помощью конструктора потребует следующих операций. 1 Щелкните на ярлычке Запросы в окне базы данных, затем щелкните на кнопке Создать. В окне диалога Новый запрос выберите вариант Конструктор, после чего в окне диалога Добавление таблицы дважды щелкните на именах нужных таблиц, а затем на кнопке Закрыть. При добавлении связанных таблиц Access автоматически создает линию объединения между этими таблицами. Чтобы создать связь между двумя таблицами, перетащите ключевое поле родительской таблицы на связываемое поле дочерней таблицы. 2 В списках полей таблиц дважды щелкните на тех полях, которые нужно использовать в качестве элементов запроса. 3 В столбцах всех полей, которые нужно сортировать, щелкните на строке Сортировка и выберите вариант По возрастанию или По убыванию. Поля сортируются в указанном порядке справа налево. Самое левое сортируемое поле является ключевым полем сортировки. Чтобы изменить порядок расположения полей, перетащите заголовки столбцов. 4 Если какие-либо поля запроса должны быть скрыты, сбросьте для них флажки в строке Вывод на экран. Такие поля будут использоваться в запросе, но не будут отображаться на экране. 5 Введите необходимые выражения в качестве условий отбора полей. Щелкните на кнопке Сохранить панели инструментов мастера запросов. Введите имя формы в текстовое поле Имя запроса окна диалога Сохранить объект и щелкните на кнопке ОК. 7 ОТЧЕТЫ В ACCESS Отчет – это особая форма представления данных, предназначенная для вывода на печать. Как правило, для формирования отчета создают запрос, в котором собирают данные из разных таблиц, с включением вычисляемых полей, группировкой, условиями отбора (любая операция необязательна). Далее, по общим правилам MS Access, на базе такого запроса проектируют отчет, который позволяет: – представить данные в удобной для чтения и анализа форме; – сгруппировать записи (по нескольким уровням) с вычислением итоговых и средних значений; – включить в отчет и напечатать графические объекты (например, объекты OLE – рисунки, фотографии, диаграммы). Быстрее всего отчет создается с помощью инструмента Автоотчет. Если щелкнуть на кнопке Создать на вкладке Отчеты, пользователю станут доступны две модификации этого инструмента: Автоотчет: в столбец и Автоотчет: ленточный. Отчет типа "в столбец" выводит записи по одной в строке, а ленточный отчет отображает каждое поле записи на отдельной строке рядом с подписью. Отчет в столбец намного более распространен, чем ленточный отчет. В редких случаях может оказаться необходимым создать отчет непосредственно в режиме конструктора на основе пустого бланка. Однако, поскольку процесс добавления элементов управления достаточно утомителен, удобнее сформировать автоотчет, а затем удалить ненужные элементы. Альтернативным способом является использование мастера отчетов. Если нужно сделать отчет с небольшим числом элементов управления или если он должен содержать только подчиненные отчеты, воспользуйтесь конструктором отчетов. Действия при работе с инструментом Автотчет следующие. 1 Перейдите на вкладку Отчеты окна базы данных и щелкните на кнопке Создать. 2 В окне диалога Новый отчет в поле со списком выберите в качестве источника данных отчета таблицу или запрос. 3 Дважды щелкните на строке Автоотчет: в столбец или Автоотчет: ленточный. Access сформирует отчет, расположит в нем все необходимые поля и выведет его на экран в режиме предварительного просмотра. 4 Чтобы изменить структуру отчета, перейдите в режим конструктора. Чтобы сохранить отчет, выберите команду Сохранить меню Файл. Предмет и задачи компьютерной графики. Этапы развития компьютерной графики. Компьютерную (машинную) графику можно определить как науку о математическом моделировании геометрических форм и облика объектов и способах визуализации полученных моделей. Преимущества невербального графического представления информации: - наглядность (лучше один раз увидеть...), - высокая информационная насыщенность, - легкость восприятия для различных профессиональных, социальных, культурных, языковых групп людей. Графических образы часто сопровождаются словесной (в том числе числовой) информацией, поскольку во многих случаях графики недостаточно для получения точных количественных оценок Невербальное графическое общение возникло на заре человеческой цивилизации, едва ли не раньше чем речь. Возможно, что наскальные рисунки доисторических людей создавались не только для культовых целей и удовлетворения эстетических потребностей, но и являлись своеобразными аналогами современных чертежей, заключавшими в себе практический опыт человечества того времени. Развитие научных основ и техники создания графических образов постоянно стимулировалось потребностями архитектуры, промышленности, науки, военного дела, навигации. Стремление визуализировать информацию наблюдается практически во всех сферах деятельности человека. И с начала использования ЭВМ возникла проблема представления получаемых данных в виде изображения. На начальном этапе программными средствами формировались различные символьные изображения: диаграммы, графики, условные схемы, планы и т.п. Вывод такой информации осуществлялся непосредственно через алфавитноцифровое печатающее устройство. Формирование компьютерной графики как самостоятельного направления относится к началу 60-х годов, когда Сазерлендом (МТИ – Массачусетский технологический институт) был создан первый специализированный пакет программного обеспечения машинной графики – интерактивная система эскизного рисования Scetchpad, принципы построения которой явились теоретической основой для программного обеспечения машинной графики. В 60-е годы были сформулированы принципы рисования отрезками, удаления невидимых линий, методы кусочного представления сложных поверхностей (Кунс, МТИ), определены методы формирования теней, учета освещенности сюжета. Первые работы были в основном направлены на развитие векторной графики, т.е. рисования отрезками. Из первых работ этого направления наибольшее влияние на развитие векторной графики оказали алгоритмы Брезенхема растеризации векторных изображений. Мощным экономическим стимулом развития машинной графики в то время послужил диктуемый конкуренцией спрос ведущих американских машиностроительных (в первую очередь авто- и авиастроения) компаний на программно-аппаратные комплексы автоматизации конструкторских и технологических работ. В 1964 году General Motors представила свою DAC-I - систему автоматизированного проектирования, разработанную совместно с IBM. В следующем году был реализован проект "Chase" - первый прототип системы числового программного управления (ЧПУ) для фирмы Lockheed. К октябрю 1966 года даже Wall Street Journal уже публиковал статьи о машинной графике. В конце шестидесятых - начале семидесятых разработка систем компьютерной графики приобрела массовый характер и перешла на качественно новый уровень. Если ранее для выполнения каких-либо работ покупателям приходилось устанавливать уникальное оборудование и разрабатывать новое программное обеспечение, то с появлением разнообразных пакетов программ, облегчающих процесс создания изображений, чертежей и интерфейсов, ситуация существенно изменилась. За десятилетие системы "под ключ" стали настолько совершенны, что почти полностью изолировали пользователя от проблем, связанных с программным обеспечением. 1 В 70-е годы значительное число теоретических и прикладных работ было направлено на развитие методов отображения пространственных форм и объектов. Это направление принято называть трехмерной компьютерной графикой или 3D-графикой. Математическое моделирование трехмерных сюжетов требует учета трехмерности пространства предметов, расположения в нем источников освещения и наблюдателя. Потребностями трехмерной компьютерной графики обусловлено большое количество работ по методам аппроксимации и представления сложных поверхностей, отображению узоров из них, генерированию текстур, рельефа, моделированию условий освещения. Одновременно значительное внимание уделялось улучшению качества синтезированных изображений, повышению уровня их реалистичности; сглаживанию погрешностей, возникающих в результате аппроксимации геометрической формы реальных тел и пространственной дискретизации изображения. Методы трехмерной компьютерной графики позволяют визуализировать сложные функциональные зависимости, получить изображения проектируемых, еще не созданных объектов, оценить облик предмета из недоступной для наблюдения позиции и решить ряд других аналогичных задач. Развитие теоретических основ компьютерной графики тесно связано с развитием аппаратных средств. В конце семидесятых они значительно изменились. Память для дисплеев стала дешевле, появилась возможность создания растровых дисплеев, имеющих множество преимуществ: вывод больших массивов данных, устойчивое, немерцающее изображение, работа с цветом и недорогие мониторы. Правда, пришлось пожертвовать качеством изображения некоторых, особенно наклонных, линий из-за того, что память была все же не настолько дешевой и при выводе наблюдался лестничный эффект. Однако впервые стало возможным получение блестящей цветовой гаммы. Растровая технология в конце семидесятых стала явно доминирующей. Устройства ввода в ранних системах компьютерной графики ограничивались клавиатурой и световыми перьями. В 1970-х этот список расширился и пополнился мышью, трекболом, графическими планшетами, и дигитайзерами, а также сенсорными устройствами. Высокоскоростные электростатические графопостроители позволяли быстро получать качественные монохромные копии. Менее дорогие, многоперьевые крупноформатные электромеханические графопостроители формировали цветные копии. Ленточные регистраторы и струйные графопостроители также стали использоваться для получения цветных изображений. В этот период разного рода организации стали предлагать стандарты, вырабатывая стратегию по учету требований, предъявляемых меняющимися технологиями и быстро растущим числом различных заказчиков. В 1979 году ANSI создал технический комитет для развития стандартов на графические интерфейсы прикладных программ и виртуальных устройств. Возможно, наиболее знаменательным событием в компьютерной графике стало создание в конце семидесятых персонального компьютера. В 1977 году Commodore выпустила свой PET (персональный электронный делопроизводитель), а компания Apple создала Apple-11. Графические и вычислительные возможности этих устройств, мягко говоря, оставляли желать лучшего. Однако ПК стимулировали процесс разработки периферийных устройств: недорогих графопостроителей, принтеров и графических планшетов. В 80-е годы сфера применения компьютерной графики существенно расширилась с появлением в 1984 году модели Apple Macintosh с их графическим интерфейсом пользователя. Первоначально областью применения ПК были не графические приложения, а работа с текстовыми процессорами и электронными таблицами, однако его возможности как графического устройства побуждали к разработке относительно недорогих программ как в области CAD/CAM, так и в более общих областях бизнеса и искусства. Персональные компьютеры стали базой для широкого использования методов машинной графики - в результате компьютерная графика стала инструментом не только инженеров-исследователей, но и специалистов многих других отраслей, непосредственно несвязанных ни с техникой, ни с программированием. В середине 80-х манипулятор "мышь" стал естественным графическим устройством ввода. Вследствие появления интереса к работе с трехмерными изображениями возникли соответствующие устройства ввода: приборы типа spaceball фирмы Spaceball Technologies, обладающий шестью степенями свободы; "Bird" фирмы Ascension Technology - сенсорное устройство позиционирования реагирующее на положение руки и движение пальца руки. 2 Эти годы характеризовались существенным повышением производительности и снижением соотношения цена/производительность. Персональные компьютеры и рабочие станции стоимостью около 10 тысяч долл. теснят вычислительные системы более ранних выпусков и графические комплексы на специализированных терминалах. Высокопроизводительные ("high-end") рабочие станции стоимостью от 30 до 100 тысяч долл. приобрели возможности вывода фотореалистических изображений в реальном масштабе времени. В 1985 году ANSI и ISO одобрили первый графический стандарт GKS, который регламентировал состав базовых возможностей аппаратно-независимых программных приложений. В 1988 году был принят расширенный стандарт GKS-3D и стандарт PHIGS. Возникли важные промышленные стандарты: PostScript от Adobe, OpenGL от Silicon Graphics и X Window System от консорциума, координируемого МТИ. Вопреки постоянным прогнозам о приближающемся конце твердых копий, почти все технологии построения цветных твердых копий приобретают популярность, включая перьевые графопостроители, лазерные и струйные принтеры. В эти годы также получили развитие системы формирования объемных твердых копий. Некоторые системы быстрого прототипирования "выращивали" трехмерные объекты в жидких полимерах, активизируемых путем ультрафиолетовых источников или спекания порошков под действием лазерных лучей либо путем послойного наращивания пластин. Многие компании, играющие сегодня ведущие роли в компьютерной графике, появились именно в это время: Silicon Graphics в 1981 году; Adobe, Autodesk и Sun Microsystems в 1982 году, Parametric Technologies в 1985 году. Увеличение памяти и скорости обработки информации в персональных ЭВМ, создание видеокомплексов с широким набором графических программ, возможность управления ими в диалоговом режиме способствуют дальнейшему расширению применения компьютерной графики. Одним из наиболее актуальных направлений в компьютерной графике является разработка принципов и методов формирования реалистичных изображений. Потребность в создании реалистичных изображений возникает в таких областях, как дизайн, машиностроительное и архитектурное проектирование, исследование физических процессов, медицина, реклама и т.п. В ряде применений реалистичность используется как средство повысить эмоциональное воздействие изображения, как, например, в рекламе, в других же отраслях — как средство оценки качества выбранных решений (в архитектурном планировании, дизайне и др.). Одно из направлений использования компьютерной графики в медицине - автоматизированное проектирование имплантантов, особенно для костей и суставов, позволяет минимизировать необходимость внесения изменений в течение операции, что сокращает время пребывания на операционном столе В системах формирования реалистичных изображений должна обеспечиваться передача всей совокупности изобразительных свойств: объемность, расположение предметов, полутона, цвет, текстура поверхности. Теоретические исследования последних лет в значительной мере были направлены на разработку методов и средств отображения всей совокупности характеристик синтезируемого изображении. В 1964 году в мире насчитывалось около сотни графических терминалов. Сейчас толъко в США используются более трех миллионов рабочих станций и десятки миллионов ПК, позволяющих получать высококачественные изображения. По оценке К. Маховера в 1994г компьютерная графика имела промышленную базу стоимостью около 36 млрд. долларов и обеспечивала работой около 300 тыс. специалистов. К настоящему моменту эти цифры, безусловно, выросли. Быстрое расширение функциональных возможностей современной вычислительной техники создало базу для развития multimedia-систем (включающих компоненту компьютерной графики), обеспечивающих отображение динамических (анимированных) сцен на уровне виртуальной реальности. Из таких систем можно отметить: системы графического моделирования для наглядного представления процессов в химии, медицине, астрономии и др.; системы имитации динамических ситуаций (например, тренажеры); системы получения двухмерных и трехмерных изображений для телевидения и кино. Первым полнометражным кинофильмом, в котором широко 3 использовалась высококачественная фотореалистическая графика стал в 1993 "Парк Юрского периода" Спилберга. Именно в развитии систем фотореалистического изображения наиболее рельефно проявляются трудности и проблемы трехмерной компьютерной графики. Для них требуется не только высокая точность моделей, но и чрезвычайно высокая производительность вычислительных средств. 1.2. Современные технические средства компьютерной графики. Кратко рассмотрим наиболее распространенные устройства ввода графической информации, их виды и физические основы работы. 2D сканеры – служат для ввода с бумажных носителей. Встроенная в сканер лампа освещает фрагмент (строку) изображения, а чувствительный элемент регистрирует отраженный свет. Виды – ручные, планшетные, рулонные, фильм(слайд)-сканеры (изображение передается на чувствительный элемент с помощью системы зеркал). В сочетании с программами обработки изображений и распознавания текстов часто встречается в офисах и дома. Для получения данных о пространственной геометрии объекта используются 3D – сканеры. Эти промышленные устройства подразделяются по типу используемых датчиков на ультразвуковые, механические, электромагнитные и лазерные. Используются сравнительно редко и в специальных областях. Применяются при создании трехмерных сцен, содержащих объекты, не являющиеся комбинацией элементарных геометрических фигур. Это дорогостоящие устройства, но они окупаются так как экономят затраты на работу компьютерных художников. Некоторые разновидности 3D – сканеров позволяют оцифровывать движущиеся объекты. Цифровые фото- и видеокамеры. Изображение, попавшее в зону досягаемости объектива проецируется на чувствительную матрицу, оцифровывается и сохраняется для передачи на компьютер. В ближайшем будущем составят серьезную конкуренцию традиционным аналоговым аппаратам. Устройства (платы) оцифровки аналогового видеосигнала. Позволяют смотреть телевизор и видео на компьютере. Часто поставляются с тюнером и интегрируются с видеоадаптером. Следует заметить, что большинство компьютерных изображений синтезируются в результате работы компьютерных программ, а не считываются с устройств ввода. Устройства вывода подразделяются на растровые и векторные. Растровые: примитив изображения – точка. Векторные: примитивы изображения – отрезок, дуга или сегмент сплайна. Мониторы – в подавляющем большинстве растровые. Бывают на основе электронно-лучевой трубки и жидкокристаллические (ЖК). ЖК мониторы - плоские, легкие, менее вредные, менее энергоемкие, более инерционные, более дорогие, имеют меньший угол обзора, используются, главным образом, в портативных компьютерах. ЖК-ячейка не генерирует свет в отличие от зерна люминофора в мониторе с ЭЛТ, а управляет интенсивностью проходящего света. По сути ЖК ячейка является светофильтром с электрическим управлением. Альтернативные плоскопанельные мониторы - плазменные дисплеи, использующие ионизированный газ. Могут иметь большие размеры, использоваться для демонстраций, но стоят очень дорого. Наряду с монитором, важным элементом видеосистемы является видеоадаптер, поскольку он определяет следующие ее характеристики: -максимальные разрешение и частоты разверток (совместно с монитором); - максимальное количество отображаемых оттенков цветов; - скорость обработки и передачи видеоданных. До недавнего времени термин «видеоадаптер» имел однозначное толкование: устройство, выполняющее единственную функцию — преобразование цифрового изображения, записанного в кадровый буфер, в аналоговый видеосигнал, подаваемый на монитор. Для повышения производительности в современных видеоадаптерах используются: 4 -графические акселераторы операций по обработке данных двумерной и трехмерной графики; -быстродействующая видеопамять; - высокоскоростные шины ввода/вывода. Кроме того, современные видеоадаптеры выполняют ряд дополнительных мультимедийных функций: -воспроизведение цифровых видеоданных в различных форматах (например,MPEG); -прием телевизионных программ и формирование телевизионного изображения на экране монитора; - вывод информации на экран телевизора (функция TV-out); - ввод/вывод аналоговых видеосигналов и др. Основными элементами видеоадаптера являются: Видеопамять – быстродействущее ЗУ, для хранения формируемого изображения в цифровом виде ROM Video BIOS – набор подпрограмм, обеспечивающих логику работы видеоадаптера Контроллер ЭЛТ – управляет движением луча по экрану ЭЛТ. Цифро- аналоговый преобразователь (ЦАП или RAMDAC) – преобразует код цвета пиксела в аналоговый сигнал. Интерфейс с высокоскоростной шиной ввода –вывода – PCI (Periphecal Component Interconnrct) или AGP (Accelerated Graphic Port) , разработанной специально для ускорения 3D – графики. Проекционные устройства. Обеспечивают большой размер проекции изображения. Принцип действия: Изображение создается на прозрачной ЖК матрице - аналоге диапозитива (кадра кинопленки, слайда) и пучком света мощной лампы проецируется через объектив на экран. Проблема – малая прозрачность и высокая стоимость матрицы. В более современных DLP (Digital Light Processing) проекторах вместо ЖК-матрицы, основанной на технологии TFT (Thin Film Transistor) используется система микрозеркал, поочередно освещаемых красными, зелеными и синими лучами. Проекторы существенно дороже мониторов. (дешевый проектор дороже дорогого монитора). Применение – презентации, домашний кинотеатр. Перспективными являются лазерные проекторы с матрицей разноцветных лазеров. Принтеры. Широко распространены матричные (с подвижной головкой), струйные, лазерные. Принципы их действия общеизвестны. Высокопроизводительные матричные принтеры с неподвижной широкой головкой (строка печатается сразу целиком) встречаются сравнительно редко и дорого стоят. Термографические принтеры используют не лазер, вал и тонер, а наносимую на бумагу пасту, расплав которой образует рисунок. Разрешение термографических принтеров обычно уступает лазерным. В термосублимационных принтерах краска испаряется и напыляется на бумагу, обеспечивая плавный цветовой переход между точками. Термосублимационные принтеры обеспечивают качество цветных изображений не уступающее качеству фотографий. Плоттеры (графопостроители). Бывают перьевые и струйные, рулонные и планшетные. Перьевой плоттер – классическое векторное устройство. Более подробно о плоттерах и принтерах можно узнать, например, из (Корриган). Более интересными представляются устройства 3D вывода. Современные системы автоматизированного проектирования, позволяют значительно сократить затраты времени и средств на разработку и конструирование новых изделий. Однако проблема изготовления первого физического образца и даже отдельной детали для изделия сколько-нибудь сложной формы остается наиболее узким местом, поскольку разработка технологии изготовления детали и 5 соответствующей оснастки зачастую требуют затрат, сопоставимых со стоимостью разработки самого изделия. Примерно с начала 80х начали интенсивно развиваться технологии формирования трехмерных объектов не путем удаления материала (точение, фрезерование, электроэрозионная обработка) или изменения формы заготовки (ковка, штамповка, прессовка), а путем постепенного наращивания (добавления) материала или изменения фазового состояния вещества в заданной области пространства. На данный момент значительного прогресса достигли технологии послойного формирования трехмерных объектов по их компьютерным образам, известные как Rapid Prototyping (быстpое пpототипиpование) или Desktop Manufacturing (настольное пpоизводство). В настоящее вpемя pазвиваются технологии послойного изготовления тpехмеpных объектов, основанные на одном из следующих способов: - лазеpном pаскpое листовых матеpиалов и их послойном соединении - спекании и наплавке поpошков металлов, кеpамики и полимеpов лазеpным излучением или электpонным пучком - полимеpизации, фотоиницииpованной лазеpным излучением или излучением pтутных ламп. Наиболее распространенными устройствами вывода изображений трехмерных объектов являются плоские (2D) – растровые устройства. Растровые изображения. Разрешение. Обработка и хранение растровых изображений. Область применения, преимущества и недостатки растровой графики. В растровой графике изображение формируется из отдельных точек – пикселов (от picture element). Растровое изображение можно представить себе в виде листа клетчатой бумаги, каждая клеточка которой закрашена некоторым (возможно белым) цветом. Количество отображаемых пикселов на единицу длины называется разрешающей способностью или разрешением устройства. Часто измеряется в dpi – dots per inch – количество точек на дюйм. Вертикальное и горизонтальное разрешение могут различаться. Разрешение большинства мониторов – 70-100 dpi. Разрешение бытовых струйных принтеров – порядка 1500dpi. Очевидно. что разрешение устройства зависит от размеров его пиксела, и одно и то же изображение на устройствах с различным разрешением будет выглядеть по-разному. Число битов, используемых компьютером для задания цвета одного пиксела называется глубиной цвета. Глубина цвета определяет в какое количество цветов (или градаций серого) можно раскрасить пиксел. 1 бит/пиксел - черно-белое изображение, 8 бит/пиксел – 256 цветов (градаций серого); 24 – более 16 миллионов цветов – это достаточно для представления всех различимых человеческим глазом цветов, поэтому зтот режим называют естественными цветами (true color). Для задания дополнительных эффектов (например, прозрачности) пикселу могут быть сопоставлены дополнительные биты (α-канал). Более подробно о работе с цветом в компьютерной графике будет рассказано позднее. Представление растрового изображения в ЭВМ обычно состоит из адреса области памяти, в которой линейно хранится информация о цвете пикселов и значений глубины цвета, ширины и высоты изображения, необходимых для правильной интерпретации этой информации. Преимущества растровой графики: • Лучше всего подходит для представления образов реального мира, состоящего из мелких частиц, объединенных в тела сложной формы. Хорошее растровое изображение фотореалистично, то есть выглядит естественно. • Большинство устройств вывода являются растровыми, что облегчает вывод на них растровых изображений. Недостатки растровой графики: • Требуется большой объем памяти, независимо от содержания изображения (размер_изображения_в_битах = число_пикселов * глубина_цвета = разрешениеX * разрешениеY * размер_области_вывода_X * размер_области_вывода_Y * глубина_цвета). 6 Отсюда необходимость компрессии/декомпрессии файлов с растровыми изображениями. • Ступенчатое изображение гладких линий (прямых, дуг, сплайнов). • Возможны искажения при поворотах и масштабировании. При увеличении растровых изображений обычно приходится решать задачу интерполяции для корректного заполнения появляющихся "разрывов" в изображении. Диапазон изменения значения коэффициента масштабирования при котором достигаются приемлемые результаты не очень велик. • Трудно выделить для обработки один из объектов изображения. Например, увеличить изображение человека на фотографии, не меняя фона – нетривиальная задача. Для сжатия файлов с растровыми изображениями часто используются алгоритмы группового кодирования (RLE – Run Length Encoding), LZW – уплотнение (Lempel, Ziv, Welch – фамилии авторов), метод JPEG (Joint Photographic Expert Group). Самый простой для реализации метод – RLE. При групповом кодировании последовательность одинаковых пикселов (байтов или слов) заменяется на один пиксел с указанием кратности его вхождения. Такой метод используется при хранении изображений в файловом формате PCX. Более эффективным является LZWуплотнение, применяемое, например в форматах TIFF и GIF. LZW-компрессия основана на построении словаря повторяющихся подпоследовательностей и замене их вхождений ссылками на соответствующие элементы словаря. В отличии от методов RLE и LZW, обеспечивающих компрессию без потерь информации об элементах изображения, метод JPEG допускает частичную потерю информации, не влияющую существенно на качество изображения, для достижения более высокой степени сжатия. Другим способом уменьшить размер файла с растровым изображением является использование таблицы цветов - палитры. В этом случае значение цвета пиксела заменяется его индексом в таблице цветов. Использование палитры наиболее эффективно, когда при большой цветовой глубине в изображении реально используется (и, следовательно, включается в палитру) сравнительно небольшое количество цветов. Палитра используется, например, в формате GIF. Для редактирования растровой графики различного назначения часто используют программу Adobe Photoshop, обеспечивающую большой набор различных полезных (и эффектных) преобразований растровых изображений и поддержку значительного количества форматов файлов. 2.2. Векторные изображения. Преимущества и недостатки векторной графики. Область применения. В векторной графике изображение задается списком математических описаний примитивов, поддерживаемых графическим устройством, например, дуг и ломаных для перьевого графопостроителя. Графические атрибуты (цвет, толщина, тип линии и др.) задаются для примитива в целом или сразу для группы последовательно отображаемых примитивов. Преимущества векторной графики: • Изображения и их отдельные фрагменты легко поворачиваются и масштабируются без потери качества. • На изображении легко выбрать один примитив или группу примитивов для последующего редактирования. • Векторные изображения занимают сравнительно небольшой объем памяти (описание, например, дуги окружности на плоскости состоит из пяти чисел – центр, радиус, начальный и конечный угол). Благодаря компактности описаний, во многих популярных файловых форматах (например, DXF, IGES, HPGL, VRML) данные хранятся в неупакованном, текстовом виде, что делает возможным их просмотр и редактирование с помощью обычного текстового редактора. 7 • Многие векторные форматы представления изображений позволяют не только хранить трехмерные описания примитивов, но и нагружать их дополнительными атрибутами, имеющими отношение к предметной области. Недостатки векторной графики: • Изображения выглядят слишком искусственно, поскольку в природе мало дуг и прямых. • При выводе на растровые устройства необходима растризация. Векторная графика широко используется для построения схем, диаграмм, чертежей в системах автоматизированного проектирования и технологической подготовки производства (AutoCAD, Кредо, ...), CASE – системах (Rational Rose, ERWin, BPWin,...), системах подготовки презентаций (MS PowerPoint, Lotus Freelance,...), офисных графических системах назначения (CorelDraw, MS Visio и др.). Многие системы векторной графики позволяют включать в векторные изображения растровые фрагменты. 8
«Языки программирования» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Смотреть все 462 лекции
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot