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


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

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



Объектно-ориентированная парадигма программирования не нова. Её истоки восходят к Симуле-67, хотя первая впервые она была полностью реализована в Smalltalk-80. ООП (Объектно-ориентированное программирование) приобрело популярность во второй половине 80-х вместе с такими языками, как С++, Objective C, Object Pascal и Turbo Pascal, CLOS, Eiffel, Ada и недавно — в Java. В этой статье внимание сосредоточена на C++, Object Pascal и Java, иногда упоминаются и другие языки.

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

Понятие объектно-ориентированного программирова­ния определяет три основные концепции, при соблюдении которых программа будет объектно-ориентированной:

1) объектно-ориентированное программирование использует в каче­стве базовых элементов классы, порождающие объекты;

2) в процессе выполнения программы может одновременно ис­пользоваться несколько объектов, порожденных от одного класса (экземпляров реализации класса);

3) классы организованы иерархически (иерархия означает “быть частью”).

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

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

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

Объект, как логическая единица, содержит следующие данные и операции (методы с кодом алгоритма) в отдельном участке памяти:

1) поля объекта (или атрибуты исходных данных), значения кото­рых определяют текущее состояние объекта;

2) методы объекта, которые реализуют действия (выполнение ал­горитмов) в ответ на их вызов в виде преданного сообщения;

3) свойства — часть методов, которые определят поведение объек­та, то есть его реакцию на внешние воздействия.

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

Объекты в программах воспроизводят все оттенки явлений ре­ального мира: “рождаются” и “умирают”; меняют свое состояние; запускают и останавливают процессы; “убивают” и “возрождают” другие объекты.

 

2)Структура Pascal-программы. Заголовок программы В заголовке указывается имя программы и список параметров. Общий вид:program n (input, output, x, y,…); здесь n – имя программы; input – файл ввода; output – файл вывода; x, y – внешние файлы, используемые в программе. Заголовка может и не быть или он может быть без параметров. Блок Блок программы состоит из шести разделов, следующих в строго определенном порядке: 1)раздел меток (label) 2)раздел констант (const) 3)раздел типов (type) 4)раздел переменных (var) 5)раздел процедур и функций 6)раздел действий (операторов). Раздел действий должен присутствовать всегда, остальные разделы могут отсутствовать. Каждый из первых четырех разделов начинается с соответствующего ключевого слова (label, const, type, var), которое записывается один раз в начале раздела и отделяется от последующей информации только пробелом, либо концом строки, либо комментарием. Раздел меток (label) Любой выполняемый оператор может быть снабжен меткой – целой положительной константой, содержащей не более 4-х цифр. Все метки, встречающиеся в программе, должны быть описаны в разделе label. Общий вид: label l1, l2, l3…; здесь l1, l2, l3 – метки. Пример. label 5, 10, 100; Метка отделяется от оператора двоеточием. Пример. Пусть оператор a:= b имеет метку 20. Тогда этот оператор выглядит так: 20: a:= b; Раздел констант (const) Если в программе используются константы, имеющие достаточно громоздкую запись (например, число пи с 8-ю знаками), либо сменные константы (для задания варианта программы), то такие константы обычно обозначаются какими-либо именами и описываются в разделе const, а в программе используются только имена констант. Это делает программу более наглядной и удобной при отладке и внесении изменений. Общий вид: const a1 = c1; a2 = c2; … здесь a1 – имя константы, c1 – значение константы. Пример. const pi = 3.14; c = 2.7531; Раздел типов (type) Если в программе вводится тип, отличный от стандартного, то этот тип описывается в разделе type: type t1 = вид_типа; t2 = вид_типа; где t1 и t2 – идентификаторы вводимых типов. Затем тип используется при объявлении переменных. Пример использования нестандартных типов: Const len=40; Type year=1930..2010; names=string[len]; Var empl: names; y: year; Раздел описания типов имеет большое значение в программе на языке Pascal. Если в программе не использовать типы, то можно столкнуться с несовместимостью типов переменных, даже если они описаны одинаково. Раздел переменных (var) Пусть в программе встречаются переменные v11, v12,…; все они должны быть описаны следующим образом: var v11, v12,…: type1; v21, v22,…: type2; … здесь v11, v12,… - имена переменных; type1 – тип переменных v11, v12,…; type2 – тип переменных v21, v22,…. Пример. var k, i, j: integer; a, b: real; Каждая переменная должна быть описана до ее использования в программе и отнесена к одному и только одному типу. Названия разделов (const, type, var…) указываются только один раз. Пример. var a: real; b: real; Таким образом, в разделе var вводится имя каждой переменной и указывается, к какому типу эта переменная принадлежит. Тип переменной можно задать двумя способами: указать имя типа (например, real, color и т.д.), либо описать сам тип, например: array[1..16] of char Раздел процедур и функций Здесь присутствуют заголовки и тела пользовательских процедур и функций. Раздел действий (операторов) Эта часть программы начинается с ключевого слова begin и заканчивается словом end, после которого должна стоять точка. Раздел действий есть выполняемая часть программы, состоящая из операторов. 4) Выражения. Старшинство операций. Выражения представляют собой конструкцию языка, которая содержит в себе данные, операции и имеется строгий порядок выполнения этих операций. Выражения всегда возвращают какое-либо значение. Операнды — это данные, над которыми производятся действия. Операндами могут быть переменные, константы, переменные массивов и другие элементы. 1. Арифметические операции Арифметические операции выполняются над целыми и действительными числами. Результатом выполнения арифметического выражения является, соответственно, целое или действительное число. Операции div и mod: • результатом целочисленного деления x div Y будет результат деления x на Y, округленный в сторону нуля до ближайшего целого числа. Например, результатом выражения 4 div 2 будет 2, а результатом выражения 17 div 4 будет 4; • результатом операции mod будет остаток от целочисленного деления операндов. Таким образом, выражение x mod у эквивалентно выражению x-(x div Y) *Y. Например, результатом выражения 4 mod 2 будет о, а результатом выражения 9 mod 4 будет 1. Пример: Var a, b, c, d: integer; Begin a: = 7; b: = 5; c: = -10; d: = a+b; d: = -d; end; 2. Логические операции Логические выражения — это выражения, в которых содержатся: 1. логические константы True И (ИЛИ) False;2. логические переменные и (или) константы типа Boolean;3. операции отношения;4. логические операции;5. скобки. В результате выполнения логической операции получается логическое значение True или False. Для того чтобы был четкий порядок выполнения операции, в языке Delphi имеется понятие приоритет. Приоритет определяет старшинство операций, служит для установления порядка выполнения операций. Операции с более высоким уровнем приоритета выполняются раньше остальных. По приоритету все операции разделяются на четыре уровня: По первый (наивысший) уровень приоритета. К нему относятся операции and и not; • второй уровень приоритета — операции *, /, div, mod, and, shl, shr и as; • третий уровень приоритета — операции +, -, or и хоr; • четвертый (самый низкий) уровень приоритета — операции =, о, <, >,<=, >=, in и is. Если подряд идут несколько операций с одинаковым приоритетом, то операции выполняются слева направо.   6) Порядковые типы данных ПОРЯДКОВЫЕ ТИПЫ К порядковым типам относятся целые, логический, символьный, перечисляемый и тип-диапазон. Целые типы. Диапазон возможных значений целых типов зависит от их внутреннего представления, которое может занимать один, два или четыре байта Логический тип Значениями логического типа может быть одна из предварительно объявленных констант FALSE (ложь) илиTRUE (истина). Поскольку логический тип относится к порядковым типам, его можно использовать в операторе счётного типа. Символьный тип. CHAR – занимает 1 байт. Значением символьного типа является множество всех символов ПК. Каждому символу присваивается целое число в диапозоне 0…255. Это число служит кодом внутреннего представления символа. Перечисляемый тип. Перечисляемый тип задаётся перечислением тех значений, которые он может получать. Каждое значение именуется некоторым идентификатором и рапологается в списке, обрамлённом круглыми скобками Тип-диапазон. Тип-диапазон есть подмножество своего базового типа, в качестве которого может выступать любой порядковый тип, кроме типа-диапазона. Тип-диапазон задаётся границами своих значений внутри базового типа: <мин.знач.>..<макс.знач.> Здесь <мин.знач.> - минимальное значение типа-диапазона. <макс.знач.> - максимальное его значение.     8)Действительные типы данных. Операции для действительных значений. Действительные типы определяет теданные, которые реализуются подмножеством действительных чисел, допустимых в данной ЭВМ.   Тип Диапазон Количество цифр Требуемая значений мантиссы память (байт) --------------------------------------------------------------- Real 2.9e-39.. 1.7e+38 11 6 Single 1.5e-45.. 3.4e+38 7 4 Double 5.0e-324.. 1.7e+308 15 8 Extended 3.4e-4932.. 1.1e+4932 19 10 Comp -9.2e+18.. 9.2e+18 19 8 ---------------------------------------------------------------   Тип Real определен в стандартном ПАСКАЛЕ иматематическим сопроцессором не поддерживается. Остальные действительные типы определены стандартом IEEE 457 и реализованы на всех современных компьютерах. Для их использования при наличии сопроцессора илипри работе на ЭВМ типа 80486 необходимо компилировать программу с ключом {$ N+}, а при отсутствии сопроцессора - с ключами {$N-,E+}. Тип Comp хотяи относится к действительным типам,хранит только длинные целые значения. Над действительными операндами можно выполнять следующие арифметические операции, дающие действительный результат: сложение +, вычитание -,умножение *,деление /. К величинам действительного типа применимы все операции отношения, дающие булевский результат. Один из операндов, участвующих в этих операциях, может быть целым. К действительным аргументам применимы функции, дающие действитель- ный результат: Abs(X), Sqr(X), Sin(X), Cos(X), ArcTan(X), Ln(X),Exp(X), Sqrt(X), Frac(X), Int(X), Pi. Функция Frac(X) возвращает дробную часть X, функция Int(X) – целую часть X. Безаргументная функция Pi возвращаетзначение числа Пи действительного типа. К аргументам действительного типа применимы также функции Trunc(X) и Round(X),дающие целыйрезультат. Первая из них выделяет целую часть действи- тельного аргумента путемотсечения дробной части, вторая округляет аргумент до ближайшего целого.   10) Строковый тип данных. Операции для строковых значений. Для обработки строковой информации в Турбо Паскаль введен строковый тип данных. Строкой в Паскале называется последовательность из определенного количества символов. Количество символов последовательности называется длиной строки. Синтаксис: var s: string[n]; var s: string; n - максимально возможная длина строки - целое число в диапазоне 1..255. Если этот параметр опущен, то по умолчанию он принимается равным 255. Строковые константы записываются как последовательности символов, ограниченные апострофами. Пустой символ обозначается двумя подряд стоящими апострофами. Если апостроф входит в строку как литера, то при записи он удваивается. Переменные, описанные как строковые с разными максимальными длинами, можно присваивать друг другу, хотя при попытке присвоить короткой переменной длинную лишние символы будут отброшены. Выражения типа char можно присваивать любым строковым переменным. (char – символьный тип, хранит ровно один символ) В Турбо Паскаль имеется простой доступ к отдельным символам строковой переменной: i-й символ переменной st записывается как st[i]. Например, если st - это 'Строка', то st[1] - это 'С', st[2] - это 'т', st[3] - 'р' и так далее. Над строковыми данными определена операция слияния (конкантенации), обозначаемая знаком +. Например: a:= 'Turbo'; b:= 'Pascal'; c:= a + b; В этом примере переменная c приобретет значение 'TurboPascal'. Кроме слияния над строками определены операции сравнения <,>,=,<>,<=,>=. Две строки сравниваются посимвольно, слева направо, по кодам символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются символом с кодом 0. Процедуры и функции для работы со строками: Length(s:string):integer Функция возвращает в качестве результата значение текущей длины строки-параметра Пример: n:= length('Pascal'); {n будет равно 6} Concat(s1,[s2,...,sn]:string):string Функция выполняет слияние строк-параметров, которых может быть произвольное количество. Каждый параметр является выражением строкового типа. Если длина строки-результата превышает 255 символов, то она усекается до 255 символов. Данная функция эквивалентна операции конкатенации "+" и работает немного менее эффективно, чем эта операция. Copy(s:string; index:integer; count:integer):string Функция возвращает подстроку, выделенную из исходной строки s, длиной count символов, начиная с символа под номером index. Пример. s:= 'Система Turbo Pascal'; s2:= copy(s, 1, 7); {s2 будет равно 'Система'} s3:= copy(s, 9, 5); {s3 будет равно 'Turbo'} s4:= copy(s, 15, 6); {s4 будет равно 'Pascal'} Delete(var s:string; index,count:integer) Процедура удаляет из строки-параметра s подстроку длиной count символов, начиная с символа под номером index. Пример. s:= 'Система Turbo Pascal' delete(s,8,6); {s будет равно 'Система Pascal'} Insert(source:string; var s:string;index:integer) Процедура предназначена для вставки строки source в строку s, начиная с символа index этой строки. Пример. s:= 'Система Pascal'; insert('Turbo ',s,9); {s будет равно 'Система Turbo Pascal'} Pos(substr,s:string):byte Функция производит поиск в строке s подстроки substr. Результатом функции является номер первой позиции подстроки в исходной строке. Если подстрока не найдена, то функция возвращает 0. Пример. s:= 'Система Turbo Pascal'; x1:= pos('Pascal', s); {x1 будет равно 15} x2:= pos('Basic', s); {x2 будет равно 0} Str(X: арифметическое выражение; var st: string) Процедура преобразует численное выражение X в его строковое представление и помещает результат в st. Val(st: string; x: числовая переменная; var code: integer) Процедура преобразует строковую запись числа, содержащуюся в st, в числовое представление, помещая результат в x. x - может быть как целой, так и действительной переменной. Если в st встречается недопустимый (с точки зрения правил записи чисел) символ, то преобразование не происходит, а в code записывается позиция первого недопустимого символа. Если после выполнения процедуры code равно 0, то это свидетельствует об успешно произошедшем преобразовании. Chr(n: byte): char Функция возвращает символ по коду, равному значению выражения n. Если n можно представить как числовую константу, то можно также пользоваться записью #n. Ord(ch: char): byte; В данном случае функция возвращает код символа ch. UpCase(c: char): char; Если c - строчная латинская буква, то функция возвращает соответствующую прописную латинскую букву, в противном случае символ c возвращается без изменения. 12) Нестандартные типы данных. Нестандартные типы данных. В языке Паскаль существуют типы данных, характеристики которых определяются пользователем, работающим с программой. Такое определение дается в разделе описания типов, начинающегося служебным словом type. Необходимость в описании нестандартных типов данных возникает тогда, когда пользователь имеет дело с некоторым набором конкретных значений. Например, наша эра, двадцатый век, цвета радуги, дни недели и т.п. 1. Скалярный или перечислимый тип данных. При определении перечислимого типа данных в круглых скобках через запятую просто перечисляются все возможные значения переменных этого типа. Пример. type st_sv=(North, South, East, West); month = (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dek); den_ned = (pn, wt, sr, ch, pt, sb, ws); Имена значений, перечисленные в списке, есть константы описываемого типа. Поэтому, если в разделе описания переменных описаны переменные var komp: st_sv; m: month; d: den_ned; то их значениями могут быть только значения, перечисленные в соответствующем типе. Например: komp:=West; m:=Nov; Недопустимы операторы присваивания типа: komp:=sb; d:=Feb; 2. Ограниченный тип данных. Синонимы: отрезочный, интервальный. При определении данного типа данных накладываются ограничения на стандартный или уже заданный тип данных, множество значений которого является перенумерованным (integer, char, boolean, перечислимый тип). Таким образом, из всего множества значений выбранного типа берется некоторый диапазон (или интервал), который задается двумя константами, разделенными двумя точками. Например: type ne = 1..2004; l_alph = ‘a’..’z’; polugodie = Jun.. Jun; Константы в определении ограниченного типа задают нижнюю и верхнюю границы отрезка, из которого может принимать значения переменная этого типа. Определение отрезочного типа верно только тогда, когда выполнено условие: нижняя граница <= верхняя граница. Переменные ограниченного типа могут быть описаны так: var year: ne: bukva: l_alph; Эти переменные будут принимать значения того же типа, что и константы, ограничивающие отрезок. К переменным ограниченного типа применимы операции и функции, которые применимы к данным тех типов, к которым относятся константы, ограничивающие диапазон значений.     14) Тип данных "запись". Оператор присоединения With. ЗАПИСИ Запись– это структура данных, состоящая из фиксированного числа компонентов, называемыхполями записи. В отличие от массива, компоненты (поля) записи могут быть различного типа. Чтобы можно было ссылаться на тот или иной компонент записи, поля именуются. Структура объявления типа записи такова: <имя типа> = RECORD <спюполей> END Здесь <имя типа> - правильный индификатор; RECORD, END – зарезервированые слова (запись, конец); <сп.полей> - список полей; представляет собой последовательность разделов записи, между которыми ставится точка с запятой. Записи Запись – связанная структура, состоящая из нескольких элементов (полей) разных (можно и одинаковых) типов. По сути, запись очень похожа на одномерный массив, но с элементами разных типов, кроме того, доступ к конкретному полю записи осуществляется уже не через индекс, а указанием идентификатора (т.е. имени) этого поля. Более того, в Паскале существует возможность менять тип конкретного поля в зависимости от ситуации. Такие структуры называются записями с вариантами. Правда, в любой записи может быть только одна вариантная часть, и, если она есть, ее описание должно располагаться за всеми фиксированными частями. Замечательная особенность вариантной части состоит в том, что все варианты как бы «накладываются» друг на друга, т.е. каждому из них выделяется одна и та же область памяти. Это открывает дополнительные возможности преобразования типов.   Оператор With Этот оператор используется для удобства работы с переменными типаrecord (запись). Общий вид: with a do st; здесь a – имя переменной типа record, st – оператор. В операторе st при ссылках на компоненты записи имя a можно опускать. Пример. Для занесения даты рождения достаточно выполнить операторы: with birthday[mother] do begin month:= 5; day:= 1; year:= 1965 end;   16) Запись и дозапись в текстовый файл Работа с текстовыми файлами. Файловые переменные для текстового файла - типа text. Открыв файл на чтение, можно работать с ним, как с консолью: читать строки, символы, переменные типа integer и так далее. Вся разница только в том, что нужно в списке аргументов процедур Readln() и Read() на первом месте указать файловую переменную. При открытии на запись - то же самое дляWriteln() и Write(). После записи файл обязательно нужно закрыть. Текстовый файл - файл последовательного доступа, то есть нельзя считать некоторую строку (или часть строки), не прочитав всё до неё.
открытие на чтение Reset(f);
открытие на запись с удалением того, что уже было записано Rewrite(f);
открытие на дозапись после того, того, что уже было записано Append(f);
закрытие файла Close(f);
чтение строки Readln(f,s);
чтение символа Read(f,a);
запись строки Writeln(f,s);
запись символа Write(f,a);

 

Операторы Write (F, x1, x2,...) и Writeln (F, x1, x2,...) записывают в файл F значения переменных x1, x2,... точно так же, как это делают операторы Write и Writeln для консольного вывода. Аргументы могут иметь любой арифметический тип и для них действуют те же правила форматирования: Write(F, x:n) - для строчных и символьных значений (n - число позиций, отводимых под значение); Write(F, x:n) - для целых значений (n - число цифр); Write(F, x:n:m) - для вещественных в обычной форме (n - общее количество позиций, m - число знаков после запятой); Write(F, x:n) - для вещественных в экспоненциальной форме (n - длина поля вывода, n>=8).
При n>0 выравнивание производится по правому краю, при n< 0 - по левому. Задача: дан массив, содержащий температуру воздуха для каждого часа на каждый день месяца. Вывести эти значения в текстовый файл в виде таблицы, при этом добавить колонку средних температур.

program Example;

 

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

Оператор присваивания - основной оператор любого языка программирования. Общая форма записи оператора:
имя величины:= выражение

Например, V:=A; или V:=A+1;
При помощи оператора присваивания переменной могут присваиваться константы и выражения, значения переменных любого типа.
Как только в программе встречается переменная, для неё в памяти отводится место. Оператор присваивания помещает значение
переменной или значение выражения в отведённое место.

Если в процессе выполнения программы встречается пере присваивание (т.е. та же самая переменная принимает другое значение), то

старое значение переменной стирается, на свободное место записывается новое значение. Команда присваивания позволяет лучше

понять смысл слова переменная (т.е. меняющая своё значение по ходу программы).

Выражение может быть арифметическим, логическим или литерным. Важно, чтобы тип величины был согласован с видом выражения.

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

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

используемые операции приведены в таблице:
НАЗВАНИЕ ОПЕРАЦИИ ФОРМА ЗАПИСИ
сложение x + y
вычитание x - y
умножение x * y
деление x / y

нельзя опускать знаки операций, например писать 5b. Для записи произведения чисел 5 и b надо писать 5*b;

аргументы функций (sin, cos и др.) как и аргументы вспомогательных алгоритмов, записываются в круглых скобках, например sin(x), cos(4*x).

 

 



Поделиться:


Последнее изменение этой страницы: 2016-09-13; просмотров: 189; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.82.232.31 (0.023 с.)