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

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

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

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


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



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

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

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

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

Пароль



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

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

Случайные загрузки
AddPage [Исходник...
Delphi. Учимся на...
Turbo Pascal for ...
PHP 5 на примерах
Краснов М. - Open...
ZipForge
PDJPack
Изучаем Ассемблер
mmmJlabel
Progressbar
HTMLredaktor
PDF
Averaging [Исходн...
начисление процен...
Globus VCL Extent...
SUIPack
FreeSMS v1.3.1
AlignEdit
Fig [Исходник на ...
SendSMS для PHP-F...

Топ загрузок
Приложение Клие... 100751
Delphi 7 Enterp... 97133
Converter AMR<-... 20228
GPSS World Stud... 16951
Borland C++Buil... 14137
Borland Delphi ... 10066
Turbo Pascal fo... 7333
Калькулятор [Ис... 5882
Visual Studio 2... 5189
FreeSMS v1.3.1 3650
Случайные статьи
Вулкан игры онлайн
Язык С и С ++: ука...
r\Network\System P...
Самоуправление или...
Кодирование
svc.cpp
А.4. ЗДРАВЫЙ СМЫСЛ
Использование Outl...
Сети доступа, пост...
Компиляторы MIPS
Рабочая площадка р...
Что происходит при...
Азартные игровые а...
Средства отладки
Проектирование с у...
Начать играть в кл...
Обнаружение датчиков
Использование “ста...
Настройте DACL на ...
Коммерческие и тех...
Форматированный вы...
Логический тип
Предикат вывода ра...
Новый вид панели F...
политику издания, ...
Статистика



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


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