Навигация
Главная
Поиск
Форум
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
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65535
Имитационное мо... 60099
Реклама
Сейчас на сайте
Гостей: 3
На сайте нет зарегистрированных пользователей

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

База данных - рабочее место кассира на Delphi + бд Access
Моделирование системы управления качеством производственного процесса на...
Калькулятор на Delphi с переводом в другую систему исчисления + Блок схемы

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
ОБЛАСТИ ВИДИМОСТИ И СКРЫТИЕ РЕАЛИЗАЦИИ


Подпрограммы и модули решают важную задачу отделения интерфейса, обеспечивающего их полное и правильное использование, от реализации — внутреннего устройства модуля или подпрограммы. При этом, особенности реализации, такие как локальные переменные, конкретный алгоритм, и т.д.— оказываются скрытыми.
Скрытие реализации имеет место и для встроенных типов данных. Представление чисел типа 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 30 2011 01:26:55 · 0 Комментариев · 5979 Прочтений · Для печати

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
PCXReader. Програ...
AntiRus
iComm v.6.1 - выв...
PDA версия сайта
PHP 5 на примерах
PHP: Полезные приемы
ZipForge
ЯЗЫК ПРОГРАММИРОВ...
Пишем программы и...
AddPage [Исходник...
Введение в станда...
Правила программи...
Программирование ...
C++ Builder: Книг...
Работа с картотеками
CwstatusBar
Создание лабиринт...
ZipTV
Сложный калькулятор
Панель Календарь

Топ загрузок
Приложение Клие... 100519
Delphi 7 Enterp... 91131
Converter AMR<-... 20098
GPSS World Stud... 15145
Borland C++Buil... 12885
Borland Delphi ... 9074
Turbo Pascal fo... 7105
Калькулятор [Ис... 5158
Visual Studio 2... 5028
FreeSMS v1.3.1 3557
Случайные статьи
Серия интерфейсов RS
ASSIGN (ПРИСВОИТЬ)
Диалоговые окна
Инструменты среды ...
Обратите внимание ...
Среди чисел 1, 2, ...
Целые числа со зна...
удаленного офиса с...
х Храните файл PKC...
Книга посвящена пр...
Значение доменного...
коммутируемых и VP...
Определение шаблон...
Вычисление определ...
Время работы прогр...
5.2. Ввод и вывод...
НИСХОДЯЩАЯ РЕКУРСИЯ
Пример работы с по...
Однострочные функции
Приэтом проверяетс...
Объемные диаграммы
Определение шаблон...
ДОСТОИНСТВА И НЕДО...
Базовая структура ...
Вещественные типы
Статистика



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


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