Концепция объектно-ориентированного программирования

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

Ввод-вывод в Turbo Pascal

Основные возможности ввода-вывода предоставляются модулем System, и их не нужно специально подключать к программе.

Первое отличие от стандартного Паскаля – в Turbo Pascal предусмотрена возможность связывать файловую переменную с именем файла на внешнем носителе с указанием пути к этому файлу. В стандартном Паскале такое связывание производилось вне программы.

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

Примеры:

Пусть f – файловая переменная, s1 – строковая константа, содержащая текст 'a:\myprog\', s2 – пустая строковая константа.

Assign(f,'myfile.dat');

Переменной f назначается файл в текущем каталоге.

Assign(f,'\myfile.dat');

Переменной f назначается файл в корневом каталоге на текущем диске.

Assign(f,'d:\myfile.dat');

Переменной f назначается файл в корневом каталоге на диске D:.

Write('Введите имя файла >');

Readln(s2);

Assign(f,s1+s2+'.dat');

Если на предложение ввести имя файла будет введен набор букв, цифр и других знаков, разрешенных для имен файлов в MS DOS, от 1 до 8 символов, переменной f будет назначен файл с этим именем в каталоге myprog на диске A: с расширением '.dat'.

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

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

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

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

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

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

Часто разнообразные реальные и виртуальные объекты обладают неким набором общих свойств и общих процедур поведения и управления. Обычно это потому, что они происходят от некоторого общего более простого прототипа. Например, модели разнообразных легковых и грузовых автомобилей могут иметь общие характеристики (отличные, но обязательно присутствующие у каждой модели), такие, как мощность двигателя, количество осей, количество ведущих колес и т.д. Такие виртуальные объекты, как диалоговые окна, окна редактирования, элементы управления, имеют много общих свойств. Они занимают на экране некоторую прямоугольную область, они могут быть активными и неактивными, они могут перекрывать другие виртуальные объекты или перекрываться другими объектами. Все они должны быть способны к перемещению по экрану, и т.д. Поэтому удобно иметь возможность создать в программе такой объект-прототип, со свойствами и методами, на основе которого можно было бы создавать множество различных объектов, наследующих базовые свойства и методы прототипа. Эта возможность реализована в концепции наследования – при описании объектного типа просто объявляется, что он является потомком некоторого другого объектного типа, в результате чего он автоматически наследует все свойства и методы объекта-предка. А к унаследованным свойствам и методам можно добавлять новые. Также при необходимости можно переопределять унаследованные методы (но не свойства), просто определяя новые методы под старыми именами.

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

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

Основные преимущества объектно-ориентированного подхода:

- более тесное логическое объединение данных и алгоритмов уменьшает вероятность ошибок и облегчает их обнаружение и исправление

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

Объектно-ориентированное программирование удачно сочетается с еще одной современной концепцией – событийным программированием.

Первый объектно-ориентированный язык, Simula-67, был создан еще в 60-ые годы 20 века. Однако широкое применение объектно-ориентированного подхода началось почти на двадцать лет позднее. Сейчас большинство языков и систем программирования не только включают в себя возможности объектно-ориентированного программирования, но и поощряют такое программирование, а иногда делают его единственно возможным.

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

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


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: