Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Сейчас на сайте
Гостей: 7
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Калькулятор на Delphi с переводом в другую систему исчисления + Блок схемы
Файл записей с выводом обратного заголовка на Turbo Pascal
Лабораторная работа по динамическим спискам на Turbo Pascal (перемещение...

ОБЛАСТИ ВИДИМОСТИ И СКРЫТИЕ РЕАЛИЗАЦИИ


Подпрограммы и модули решают важную задачу отделения интерфейса, обеспечивающего их полное и правильное использование, от реализации — внутреннего устройства модуля или подпрограммы. При этом, особенности реализации, такие как локальные переменные, конкретный алгоритм, и т.д.— оказываются скрытыми.
Скрытие реализации имеет место и для встроенных типов данных. Представление чисел типа real для большинства программистов является загадкой. Но возможно вы знаете, что в Borland Pascal строки занимают 256 байт, причем нулевой байт содержит длину строки. Аналогично устроены и строки в 16–ти разрядной версии Delphi. С чьей–то легкой руки это свойство строк стало широко известно, но оно является реализацией.
Хороший стиль программирования не допускает использования особенностей реализации. Если в некоторых случаях вы писали Ord(s[0]) вместо Lenght(s), вы это правило нарушали. Расплатой послужит то, что в Delphi ваши программы перестанут работать — представление строк изменилось. Обратите внимание, что разработчики новой версии не несут никакой ответственности за это, они вам дали функцию Length. Ошибку делали вы.
Нельзя ли предупредить подобные ошибки в типах создаваемых программистом? Оказывается в ООП это не только можно, но и нужно делать. Разработчик класса должен представить пользователю все необходимые средства для работы с объектами (интерфейс), но скрыть конкретные детали устройства класса (реализацию).
Так для нашего класса TCircle естественно потребовать, чтобы радиус окружности был больше или равен 0. Этого нельзя гарантировать, скажем, для записи. Ведь нехороший программист всегда может сделать что–нибудь вроде c1.Fr := -1. В действительности, представление радиуса числом типа real является особенностью реализации , поэтому прямой доступ к полю Fr следует закрыть.
Объявление класса разбивается на зоны с разной областью видимости: public (общая) и private (частная). Все, что объявлено в зоне public, может использоваться не только в методах класса, но и в любых других частях программы. Все, что объявлено в зоне private, может быть использовано только методами этого класса. Объявленные в private поля и методы не доступны даже классам–потомкам.
Если зона явно не указана, Pascal понимает ее как public. Т.е. наши классы имеют только зону public, и инструкция c1.Fr := -1 для TCircle допустима в любой части программы. Давайте усовершенствуем их определения:
ОБЛАСТИ ВИДИМОСТИ И СКРЫТИЕ РЕАЛИЗАЦИИ
Теперь обратиться непосредственно к полям класса вне методов TCircle невозможно. Подобная попытка приведет к ошибке в процессе компиляции. Единственный способ изменять поля в других частях программы — это вызывать методы SetX, SetY и SetR. А в SetR можно проверить значение параметра и не допустить запрещенной величины радиуса.
Обратите внимание на тот факт, что нам не пришлось переписывать методы, в частности, метод Distance использует закрытые поля Fx и Fy объекта, переданного как параметр. Это допустимо, ведь оба объекта принадлежат одному классу. Таким образом,
ограничение области видимости относится не к объекту, а к классу.
В Delphi существуют два других типа областей видимости. Мы коснемся только одного — protected. Все что указано в зоне protected доступно в методах классов–потомков. Кроме того, классы–потомки могут переносить такие объявления в область public.
Для обычных процедур и функций, определенных в других модулях, а так же для методов классов, не являющихся наследниками данного класса, компоненты из раздела protected не доступны. Таким образом, поля и методы объявленные в части protected, имеют область видимости, ограниченную потомками класса.
Возможность ограничения областей видимости составляет вторую часть понятия инкапсуляции. Язык позволяет скрывать несущественные особенности реализации класса. Скрывая поля, программист обязан предоставить методы для работы с ними, объединив их в одно понятие — класс.
Строгие правила скрытия внутреннего устройства классов из практических соображений несколько смягчены. Они действуют только вне модуля (unit), в котором описан класс.
В пределах модуля, содержащего объявление класса, механизмы инкапсуляции в Delphi, выключены!
Это позволяет создавать тесные группы классов, которые “знают все друг о друге” и даже обычные процедуры, имеющие доступ к закрытым полям класса. С другой стороны, такое правило заставляет помещать законченные классы в законченные модули, дабы гарантировать их правильное использование.
Опубликовал Kest May 29 2011 21:26:55 · 0 Комментариев · 6645 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Игра PackMan
MpegPlay
Dnavigator
Ведение справочны...
Animated Menus
AboutSystem
Swat [Исходник на...
AUTOWEB
Базы данных в Инт...
UmEdit
Java в примерах -...
База англоязычных...
ProLIB18
начисление процен...
PHP, MySQL и Drea...
MxProtector
DragMe [Исходник ...
Delphi7 Для профе...
Шифрование по алг...
FreeSMS v1.3.1

Топ загрузок
Приложение Клие... 100774
Delphi 7 Enterp... 97837
Converter AMR<-... 20268
GPSS World Stud... 17014
Borland C++Buil... 14192
Borland Delphi ... 10292
Turbo Pascal fo... 7374
Калькулятор [Ис... 5984
Visual Studio 2... 5207
Microsoft SQL S... 3661
Случайные статьи
Встраивайте SQL-за...
Установка голубого...
Просмотр курсора, ...
Спирт Пшеничная с...
Выполнение процеду...
File not found
Для функций, объяв...
Ряды и точки
Страница сгенериро...
Класс-итератор мож...
Microsoft - в инте...
Флаги сообщений BP...
Где уклономер купить
Вычисление суммы ч...
Диалоговое окно Re...
Основные понятия О...
Что нужно для двои...
Требования голосов...
Рационализация дом...
Радиостанции
Варианты рубрикаци...
Можно поместитьпри...
Слоты Gms Deluxe с...
Планируйте издание...
Управления рубрика...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?