4610

Основные принципы объектно-ориентированного программирования, реализации этих принципов в визуальной интегрированной системе разработки программ Delphi

Реферат

Информатика, кибернетика и программирование

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

Русский

2012-11-23

1.01 MB

258 чел.

Введение

Сложность современного программного обеспечения требует от разработчиков владения наиболее перспективными технологиями его создания. Одной из таких технологий на настоящий момент является объектно-ориентированное программирование (ООП), применение которого позволяет разрабатывать программное обеспечение повышенной сложности за счет улучшения его технологичности (лучших механизмов разделения данных, увеличения повторяемости кодов, использования стандартизованных интерфейсов пользователя и т.д.). Чтобы технологически грамотно использовать ООП, необходимо хорошо понимать его основные концепции и научиться мыслить при разработке программы в понятиях ООП.


1. ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ – ОСНОВНЫЕ ПОНЯТИЯ И ПРИНЦИПЫ

На протяжении всех лет существования практика программирования требовала совершенствования технологических приемов и создания на их основе таких средств программирования, которые упростили бы процесс разработки программ, позволяя создавать все более сложные программные системы.

Первые программы были организованы очень просто. Они состояли из собственно программы на машинном языке и обрабатываемых данных. Сложность программ ограничивалась способностью программиста одновременно мысленно отслеживать последовательность выполняемых операций и местонахождение большого количества данных.

Создание сначала ассемблеров, а затем и языков высокого уровня сделало программу более обозримой за счет снижения уровня детализации и естественно позволило увеличить ее сложность.

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

И вновь сложность разрабатываемого программного обеспечения стала ограничиваться возможностью программиста отслеживать процессы обработки данных уже на новом уровне. К этому добавились проблемы согласования интерфейса при ведении разработки несколькими программистами. В результате встал вопрос создания технологии разработки сложных программных продуктов, снижающей вероятность появления ошибок. Усилиями многих авторов такая технология была создана и получила название «структурное программирование».

Структурное программирование представляет собой совокупность рекомендуемых технологических приемов, охватывающих выполнение всех этапов разработки программного обеспечения. Были сформулированы основные принципы выполнения разработки:

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

Поддержка принципов структурного программирования была заложена в основу процедурных языков программирования. Среди наиболее известных языков этой группы стоит назвать PL/1, ALGOL-68, Pascal, С.

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

Модульное программирование предполагает выделение групп подпрограмм, использующих одни и те же глобальные данные, в отдельно компилируемые модули (библиотеки подпрограмм), например, модуль графических ресурсов, модуль подпрограмм вывода на принтер. Связи между модулями осуществляются через специальный интерфейс, в то время как доступ к реализации модуля (телам подпрограмм и некоторым «внутренним» переменным) запрещен. Эту технологию поддерживают современные версии языков Pascal и С (С++), языки Ада и Modula.

Использование модульного программирования существенно упрощает ведение разработки программ несколькими программистами, каждый из которых разрабатывает свои модули. Внутренняя организация модулей скрыта от остальных и потому может изменяться независимо. Взаимодействие модулей осуществляется через специально оговоренные интерфейсы модулей. Кроме того, модули в дальнейшем могут использоваться в других разработках, что увеличивает производительность труда программистов.

Структурный подход в сочетании с модульным программированием позволяет получать достаточно надежные программы, размер которых не превышает 100 000 операторов. Узким местом модульного программирования является то, что ошибка в интерфейсе при вызове подпрограммы выявляется только при выполнении программы (из-за раздельной компиляции модулей обнаружить эти ошибки раньше невозможно). При увеличении размера программы свыше 100 000 операторов обычно возрастает сложность межмодульных интерфейсов, и предусмотреть взаимовлияние отдельных частей программы становится практически невозможно.

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

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

Взаимодействие программных объектов в такой системе осуществляется путем передачи сообщений (рис. 1.1).

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

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

Рис. 1.1. Архитектура программы при ООП

Основной недостаток ООП – некоторое снижение быстродействия за счет более сложной организации программной системы.

Основные понятия ООП

1. Класс. Представьте себе, что вы являетесь конструктором и собираетесь спроектировать легковой автомобиль. Вы знаете, что автомобиль должен содержать кузов, двигатель, подвеску, две передних фары, 4 колеса, и т.д. Ещё вы знаете, что автомобиль должен иметь возможность набирать и сбавлять скорость, совершать поворот и двигаться задним ходом. И, что самое главное, вы точно знаете, как взаимодействует двигатель и колёса, согласно каким законам движется распредвал и коленвал, а также как устроены дифференциалы. Вы уверены в своих знаниях и начинаете проектирование.

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

Классэто способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью.

С точки зрения программирования класс можно рассматривать как набор данных (полей, атрибутов, членов класса) и функций для работы с ними (методов):

Класс = Набор данных + Методы

С точки зрения структуры программы, класс является сложным типом данных.

В нашем случае, класс будет отображать сущность – автомобиль.

Атрибуты класса «Автомобиль»: кузов, двигатель, подвеска, четыре колеса и т.д.

Методы класса «Автомобиль»: открыть дверь, нажать на педаль газа, а также «закачать порцию бензина из бензобака в двигатель».

Очевидно, что первые два метода доступны для выполнения другим классам (в частности, классу «Водитель»). Последний описывает взаимодействия внутри класса и не доступен пользователю.

2. Объект. Вы отлично потрудились и автомобили, разработанные по вашим чертежам, сходят с конвейера. Вот они, стоят ровными рядами на заводском дворе. Каждая из них точно повторяет ваши чертежи. Все системы взаимодействуют именно так, как вы спроектировали. Но каждая машина уникальна. Они все имеют номер кузова и двигателя, но все эти номера разные, автомобили различаются цветом, а некоторые даже имеют литьё вместо штампованных дисков. Эти автомобили, по сути, являются объектами вашего класса.

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

Другими словами, объект имеет конкретные значения атрибутов и методы, работающие с этими значениями на основе правил, заданных в классе. В данном примере, если класс – это некоторый абстрактный автомобиль из «мира идей», то объект – это конкретный автомобиль, стоящий у вас под окнами.

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

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

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

3. Интерфейс. Когда мы подходим к автомату с кофе или садимся за руль, мы начинаем взаимодействие с ними. Обычно, взаимодействие происходит с помощью некоторого набора элементов: щель для приёмки монеток, кнопка выбора напитка и отсек выдачи стакана в кофейном автомате; руль, педали, рычаг коробки переключения передач в автомобиле. Всегда существует некоторый ограниченный набор элементов управления, с которыми мы можем взаимодействовать.

Интерфейсэто набор методов класса, доступных для использования другими классами.

Очевидно, что интерфейсом класса будет являться набор всех его публичных методов в совокупности с набором публичных атрибутов. По сути, интерфейс специфицирует класс, чётко определяя все возможные действия над ним.

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

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

Примером простого интерфейса может служить машина с коробкой-автоматом. Освоить её управление очень быстро сможет любой человек, окончивший двухнедельные курсы вождения. С другой стороны, чтобы освоить управление современным пассажирским самолётом, необходимо несколько месяцев, а то и лет упорных тренировок. С другой стороны, вы никогда не заставите автомобиль подняться в воздух и перелететь из Киева в Париж.

4. Инкапсуляция. Представим на минутку, что мы оказались в конце позапрошлого века, когда Генри Форд ещё не придумал конвейер, а первые попытки создать автомобиль сталкивались с критикой властей по поводу того, что эти коптящие монстры загрязняют воздух и пугают лошадей. Представим, что для управления первым паровым автомобилем необходимо было знать, как устроен паровой котёл, постоянно подбрасывать уголь, следить за температурой, уровнем воды. При этом для поворота колёс использовать два рычага, каждый из которых поворачивает одно колесо в отдельности. Можно согласиться с тем, что вождение автомобиля того времени было весьма неудобным и трудным занятием.

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

Инкапсуляцияэто свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя.

Инкапсуляция неразрывно связана с понятием интерфейса класса. По сути, всё то, что не входит в интерфейс, инкапсулируется в классе.

5. Абстракция. Представьте, что водитель едет в автомобиле по оживлённому участку движения. Понятно, что в этот момент он не будет задумываться о химическом составе краски автомобиля, особенностях взаимодействия шестерён в коробке передач или влияния формы кузова на скорость (разве что, автомобиль стоит в глухой пробке и водителю абсолютно нечем заняться). Однако, руль, педали, указатель поворота (ну и, возможно, пепельницу) он будет использовать регулярно.

Абстрагированиеэто способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые. Соответственно, абстракцияэто набор всех таких характеристик.

6. Полиморфизм. Любое обучение вождению не имело бы смысла, если бы человек, научившийся водить, скажем, ВАЗ 2106 не мог потом водить ВАЗ 2110 или BMW X3. С другой стороны, трудно представить человека, который смог бы нормально управлять автомобилем, в котором педаль газа находится левее педали тормоза, а вместо руля – джойстик.

Всё дело в том, что основные элементы управления автомобиля имеют одну и ту же конструкцию и принцип действия. Водитель точно знает, что для того, чтобы повернуть налево, он должен повернуть руль, независимо от того, есть там гидроусилитель или нет.

Если человеку надо доехать с работы до дома, то он сядет за руль автомобиля и будет выполнять одни и те же действия, независимо от того, какой именно тип автомобиля он использует. По сути, можно сказать, что все автомобили имеют один и тот же интерфейс, а водитель, абстрагируясь от сущности автомобиля, работает именно с этим интерфейсом. Если водителю предстоит ехать по немецкому автобану, он, вероятно, выберет быстрый автомобиль с низкой посадкой, а если предстоит возвращаться из отдалённого маральника в Горном Алтае после дождя, скорее всего, будет выбран УАЗ с армейскими мостами. Но, независимо от того, каким образом будет реализовываться движение и внутреннее функционирование машины, интерфейс останется прежним.

Полиморфизм (многообразие) – это свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта.

7. Наследование. Представим себя, на минуту, инженерами автомобильного завода. Нашей задачей является разработка современного автомобиля. У нас уже есть предыдущая модель, которая отлично зарекомендовала себя в течение многолетнего использования. Всё бы хорошо, но времена и технологии меняются, а наш современный завод должен стремиться повышать удобство и комфорт выпускаемой продукции и соответствовать современным стандартам.

Нам необходимо выпустить целый модельный ряд автомобилей: седан, универсал и малолитражный хэтчбэк. Очевидно, что мы не собираемся проектировать новый автомобиль с нуля, а, взяв за основу предыдущее поколение, внесём ряд конструктивных изменений. Например, добавим гидроусилитель руля и уменьшим зазоры между крыльями и крышкой капота, поставим противотуманные фонари. Кроме того, в каждой модели будет изменена форма кузова.

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

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

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

Действительно, в нашем примере мы могли бы произвести с новыми автомобилями все те же действия, что и со старым: увеличить или уменьшить скорость, повернуть, включить сигнал поворота. Однако, дополнительно у нас бы появилась возможность, например, включить противотуманные фонари.

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

Принципы ООП

В основу ООП положены следующие принципы:

1. Абстрагирование – процесс выделения абстракций в предметной области задачи. Абстракция – совокупность существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов и, таким образом, четко определяют особенности данного объекта с точки зрения дальнейшего рассмотрения и анализа.

Применяемая абстракция реального предмета существенно зависит от решаемой задачи: в одном случае нас будет интересовать форма предмета, в другом вес, в третьем – материалы, из которых он сделан, в четвертом – закон движения предмета и т.д.

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

2. Ограничение доступа – сокрытие отдельных элементов реализации абстракции, не затрагивающих существенных характеристик ее как целого.

Необходимость ограничения доступа предполагает разграничение двух частей в описании абстракции:

  •  интерфейс – совокупность доступных извне элементов реализации абстракции (основные характеристики состояния и поведения);
  •  реализация – совокупность недоступных извне элементов реализации абстракции (внутренняя организация абстракции и механизмы реализации ее поведения).

Ограничение доступа в ООП позволяет разработчику:

  •  выполнять конструирование системы поэтапно, не отвлекаясь на особенности реализации используемых абстракций;
  •  легко модифицировать реализацию отдельных объектов, что в правильно организованной системе не потребует изменения других объектов.

Сочетание объединения всех свойств предмета (составляющих его состояния и поведения) в единую абстракцию и ограничения доступа к реализации этих свойств получило название инкапсуляции.

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

4. Иерархия – ранжированная или упорядоченная система абстракций. Принцип иерархичности предполагает использование иерархий при разработке программных систем.

В ООП используются два вида иерархии:

  •  иерархия «целое/часть» – показывает, что некоторые абстракции включены в рассматриваемую абстракцию как ее части, например, лампа состоит из цоколя, нити накаливания и колбы. Этот вариант иерархии используется в процессе разбиения системы на разных этапах проектирования;
  •  иерархия «общее/частное» – показывает, что некоторая абстракция является частным случаем другой абстракции, например, «обеденный стол – конкретный вид стола», а «столы – конкретный вид мебели». Используется при разработке структуры классов, когда сложные классы строятся на базе более простых путем добавления к ним новых характеристик и, возможно, уточнения имеющихся.

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

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

Использование принципа типизации обеспечивает:

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

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

6. Параллелизм – свойство нескольких абстракций одновременно находиться в активном состоянии, т.е. выполнять некоторые операции.

Существует целый ряд задач, решение которых требует одновременного выполнения некоторых последовательностей действий. К таким задачам, например, относятся задачи автоматического управления несколькими процессами.

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

7. Устойчивость – свойство абстракции существовать во времени независимо от процесса, породившего данный программный объект, и/или в пространстве, перемещаясь из адресного пространства, в котором он был создан.

Различают:

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

Все указанные выше принципы в той или иной степени реализованы в различных версиях объектно-ориентированных языков.

Язык считается объектно-ориентированным, если в нем реализованы первые четыре из рассмотренных семи принципов.

Несмотря на то, что принципиально ООП возможно на многих языках программирования, желательно для создания объектно-ориентированных программ использовать объектно-ориентированные языки, включающие специальные средства, например, Borland Pascal (начиная с версии 5.5), С++, Delphi и т.д.

В табл. 1.1 представлены сравнительные характеристики основных объектно-ориентированных языковых средств.

Таблица 1.1. Сравнительные характеристики моделей ООП в некоторых средах программирования

Характеристики

Среды программирования

Borland Pascal 7.0

Borland С++3.1

Delphi

C++ Builder

Абстракции:

объекты

классы

да

да

да

да

да

да

да

да

Ограничение доступа:

механизм сокрытия деталей реализации

внутри модуля

внутри класса и/или потомков класса

внутри модуля и потомков класса

внутри класса и/или потомков класса

обеспечение интерфейса к полям объекта

нет

нет

да

да

Модульность:

интерфейс

реализация

да

да

да (файл-заголовок) да (файл)

да

да

да (файл-заголовок)

да (файл)

Иерархичность:

«целое - часть»

да

да

да

да

«общее - частное»

наследование

да

простое

да

множественное

да

простое

да

множественное

Типизация:

степень

позднее связывание

шаблоны

строгое

да

нет

среднее

да

да

строгое

да

нет

среднее

да

да

метаклассы

нет

нет

да

нет

Параллелизм

разделение времени

моделируется

моделируется

обеспечивается Windows

обеспечивается Windows

Устойчивость объектов

определяется временем жизни переменной

Особое место занимают объектные модели Delphi и C++Builder. Эти модели обобщают опыт ООП для MS DOS и включают некоторые новые средства, обеспечивающие эффективное создание более сложных систем. На базе этих моделей созданы визуальные среды для разработки приложений Windows. Сложность программирования под Windows удалось существенно снизить за счет создания специальных библиотек объектов, «спрятавших» многие элементы техники программирования.

Этапы разработки программных систем с использованием ООП

Процесс разработки программного обеспечения с использованием ООП включает четыре этапа: анализ, проектирование, эволюция, модификация.

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

2. Проектирование. Различают:

  •  логическое проектирование, при котором принимаемые решения практически не зависят от условий эксплуатации (операционной системы и используемого оборудования);
  •  физическое проектирование, при котором приходится принимать во внимание указанные факторы.

Логическое проектирование заключается в разработке структуры классов: определяются поля для хранения составляющих состояния объектов и алгоритмы методов, реализующих аспекты поведения объектов. При этом используются рассмотренные выше приемы разработки классов (наследование, композиция, наполнение, полиморфизм и т.д.). Результатом является иерархия или диаграмма классов, отражающие взаимосвязь классов, и описание классов.

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

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

Использование поэтапной реализации существенно упрощает тестирование и отладку программного продукта.

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

Простота модификации позволяет сравнительно легко адаптировать программные системы к изменяющимся условиям эксплуатации, что увеличивает время жизни систем, на разработку которых затрачиваются огромные временные и материальные ресурсы.

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


2. СРЕДА ПРОГРАММИРОВАНИЯ DELPHI И ИНТЕРФЕЙС ПОЛЬЗОВАТЕЛЯ

2.1. Визуальное программирование интерфейса

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

Выход из этой ситуации обозначился благодаря двум подходам. Первый из них — стандартизация многих функций интерфейса, благодаря чему появилась возможность использовать библиотеки, имеющиеся, например, в Windows. В частности, появился API Windows (Application Programming Interface) — интерфейс программирования приложений, в котором описано множество функций. На этом пути создались прекрасные условия для решения одной из важнейших задач совершенствования техники программирования — повторного использования кодов. Однажды разработанные формы, компоненты, функции могли быть впоследствии неоднократно использованы вами или другими программистами для решения их задач. Каждый программист получил доступ к наработкам других программистов и к огромным библиотекам, созданным различными фирмами. Причем была обеспечена совместимость программного обеспечения, разработанного на разных алгоритмических языках.

Вторым революционным шагом, кардинально облегчившим жизнь программистов, явилось появление визуального программирования, возникшего в Visual Basic и нашедшего блестящее воплощение в Delphi и C++ Builder фирмы Borland.

Визуальное программирование позволило свести проектирование пользовательского интерфейса к простым и наглядным процедурам, которые дают возможность за минуты или часы сделать то, на что ранее уходили месяцы работы. В современном виде в Delphi это выглядит так.

Вы работаете в Интегрированной Среде Разработки (ИСР или Integrated Development EnvironmentIDE) — системе программных средств, используемых программистами для разработки программного обеспечения. Обычно среда разработки включает в себя текстовый редактор, компилятор и/или интерпретатор, средства автоматизации сборки, отладчик. Иногда содержит также средства для интеграции с системами управления версиями и разнообразные инструменты для упрощения конструирования графического интерфейса пользователя. Многие современные среды разработки также включают браузер классов, инспектор объектов и диаграмму иерархии классов — для использования при объектно-ориентированной разработке ПО. Частный случай ИСР — среды визуальной разработки, которые включают в себя возможность визуального редактирования интерфейса программы.

Среда предоставляет вам формы (в приложении их может быть несколько), на которых размещаются компоненты. Обычно это оконная форма, хотя могут быть и невидимые формы. На форму с помощью мыши переносятся и размещаются пиктограммы компонентов, имеющихся в библиотеках Delphi. С помощью простых манипуляций вы можете изменять размеры и расположение этих компонентов. При этом вы все время в процессе проектирования видите результат — изображение формы и расположенных на ней компонентов. Вам не надо мучиться, многократно запуская приложение и выбирая наиболее удачные размеры окна и компонентов. Результаты проектирования вы видите, даже не компилируя программу, немедленно после выполнения какой-то операции с помощью мыши.

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

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

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

Компоненты библиотек Delphi и типы других объектов оформляются в виде классов. Классыэто типы, определяемые пользователем. В классах описываются свойства объекта, его методы и события, на которые он может реагировать. Язык программирования Delphi предусматривает только инструментарий создания классов. А сами классы создаются разработчиками программного обеспечения. Создатели Delphi уже разработали для вас множество очень полезных классов и включили их в библиотеки системы. Этими классами вы пользуетесь при работе в Интегрированной Среде Проектирования. Впрочем, это нисколько не мешает создавать вам свои новые классы.

Благодаря визуальному объектно-ориентированному программированию была создана технология, получившая название быстрая разработка приложений, по-английски RADRapid Application Development. Эта технология характерна для нового поколения систем программирования, к которому относится и Delphi.

Приложения Delphi прекрасно могут использовать разработки на других языках, включая C++ и даже ассемблер. Можно использовать библиотеки, созданные другими фирмами, в частности, Microsoft или независимыми разработчиками. Можно реализовывать свои разработки в виде самостоятельных выполняемых файлов или в виде пакетов, поддерживающих выполнение ряда приложений.

Отдельно надо сказать об одной из главных задач Delphi — разработке приложений для работы с базами данных. В этой области Delphi занимает самые передовые позиции, работая с любыми системами управления базами данных.

2.2. Интегрированная Среда Разработки Delphi

Интегрированная Среда Разработки (ИСР, Integrated Development EnvironmentIDE) — это среда, в которой есть все необходимое для проектирования, запуска и тестирования приложений и где все нацелено на облегчение процесса создания программ. ИСР интегрирует в себе редактор кодов, отладчик, инструментальные панели, редактор изображений, инструментарий баз данных — все, с чем приходится работать. Эта интеграция предоставляет разработчику гармоничный набор инструментов, дополняющих друг друга. Более того, предоставлена возможность расширять меню ИСР, включая в него необходимые дополнительные программы, в том числе и собственные. Результатом является удобная среда быстрой разработки сложных прикладных программ.

Запустите Delphi, выполнив двойной щелчок мышью на ярлыке программы на рабочем столе, либо выполните команды меню Windows: Пуск Программы Borland Delphi 7 Delphi 7. После этого откроется основное окно Интегрированной Среды Разработки (рис. 2.1).

Рис. 2.1. Основное окно Интегрированной Среды Разработки в Delphi 7

В верхней части окна ИСР находится главное меню программы (1). Ниже него расположены две инструментальные панели. Левая панель (состоящая в свою очередь из нескольких панелей) содержит два ряда быстрых кнопок, дублирующих некоторые наиболее часто используемые команды меню (2), (3). Правая панель содержит палитру компонентов библиотеки визуальных компонентов (Visual Component LibraryVCL) (4).

Правее полосы главного меню размещена еще одна небольшая инструментальная панель, содержащая выпадающий список и две быстрые кнопки. Это панель сохранения и выбора различных конфигураций окна ИСР, которые вы сами можете создавать и запоминать.

В основном поле окна вы можете видеть слева два окна: сверху — Дерево Объектов (Object TreeView) (5), отображающее иерархическую связь визуальных и невизуальных компонентов и объектов разрабатываемого приложения, а под ним — Инспектор Объектов (Object Inspector) (6) — это основной инструмент, с помощью которого задаются свойства компонентов и выбираются обработчики событий. Правее этих окон вы можете видеть окно формы (8), готовой для переноса на нее компонентов. Под ним расположено окно Редактора Кодов (7).

Рассмотрим теперь основные элементы окна ИСР.

Главное меню и всплывающие меню

Разделы меню File (Файл) позволяют создать новый проект, новую форму, фрейм, модуль данных, открыть ранее созданный проект или форму, сохранить проекты или формы в файлах с заданными именами.

Разделы меню Edit (Правка) позволяют выполнять операции обмена с буфером Clipboard, а также дают возможность выравнивать группы размещенных на форме компонентов по размерам и местоположению.

Разделы меню Search (Поиск) позволяют осуществлять в коде приложения поиск и контекстные замены.

Разделы меню View (Вид) позволяют вызывать на экран различные окна, необходимые для проектирования.

Разделы меню Project (Проект) позволяют добавлять и убирать из проекта формы, задавать опции проекта, компилировать проект без его выполнения и делать много других полезных операций.

Меню Run (Выполнение) дает возможность выполнять проект в нормальном или отладочном режимах, продвигаясь по шагам, останавливаясь в указанных точках кода, просматривая значения переменных и т.д.

Меню Component (Компонент) позволяет создавать и устанавливать новые компоненты, конфигурировать палитру компонентов.

Разделы меню Database (База данных) позволяют использовать инструментарий для работы с базами данных.

Меню Tools (Инструменты) включает ряд разделов, позволяющих выполнять настройки ИСР и вызывать различные вспомогательные программы, например, вызывать Редактор Изображений (Image Editor), работать с программами, конфигурирующими базы данных и сети и т.д. Кроме того, в это меню вы можете сами включить любые разделы, вызывающие те или иные приложения, и таким образом расширить возможности главного меню Delphi, приспособив его для своих задач.

Разделы меню Window (Окно) позволяют ориентироваться среди массы окон, обычно одновременно открытых в процессе проектирования и переключаться в нужное окно.

Меню Help (Справка) содержит разделы, помогающие работать со встроенной в Delphi справочной системой, в частности, настраивать ее.

Помимо главного меню в Delphi имеется система контекстных всплывающих меню, которые появляются, если пользователь поместил курсор мыши в том или ином окне или на том или ином компоненте и щелкнул правой кнопкой мыши. Большинство разделов этих контекстных меню дублируют основные разделы главного меню.

Быстрые кнопки

Инструментальные панели быстрых кнопок для Delphi 7 представлены на рис. 2.2.

   

                                      а)                                                    б)                                      в)

Рис. 2.2. Инструментальные панели в Delphi 7: основные (а), панель настройки конфигурации (б) и панель Интернет (в)

Панель Internet по умолчанию невидима (для ее включения следует выполнить команды меню View Toolbars   Internet). Назначение размещенных на панелях быстрых кнопок можно узнать из ярлычков, появляющихся, если вы поместите курсор мыши над соответствующей кнопкой и на некоторое время задержите его. В табл. 2.1 приведены пиктограммы этих кнопок, соответствующие им команды меню и «горячие» клавиши, а также краткие пояснения.

Таблица 2.1. Быстрые кнопки

Пиктограмма

Команда меню / «горячие» клавиши

Пояснение команды

New items

File New Other

Создать проект или модуль из Депозитария

Open

File Open

File Reopen

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

Save

File Save

File Save As

(Ctrl + S)

Сохранить файл модуля, с которым в данный момент идет работа

Save All

File Save All

(Shift + Ctrl + S)

Сохранить все (все файлы модулей и файл проекта)

Open Project

File Open Project

(Ctrl + F11)

Открыть файл проекта

Add file to project

Project Add to Project

(Shift + F11)

Добавить файл в проект

Remove file from project

Project Remove from Project

Удалить файл из проекта

Help contents

Help Delphi Help

Вызов страницы Содержание встроенной справки

View Unit

View Units

(Ctrl + F12)

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

View Form

View Forms

(Shift + F12)

Переключиться на просмотр формы, выбираемой из списка

Toggle Form/Unit

View Toggle Form/Unit

(F12)

Переключение между формой и соответствующим ей файлом модуля

New Form

File New Form

Включить в проект новую форму

Run

Run Run

(F9)

Выполнить приложение. Кнопка со стрелкой справа от основного изображения позволяет выбрать выполняемый файл, если вы работаете с группой приложений

Pause

Run Program Pause

Пауза выполнения приложения и просмотр информации CPU. Кнопка и соответствующий раздел меню доступны только во время выполнения приложения

Trace into

Run Trace Into

(F7)

Пошаговое выполнение программы с заходом в функции

Step over

Run Step Over

(F8)

Пошаговое выполнение программы без захода в функции

Save current desktop

View Desktops Save Desktop

Сохранение текущей конфигурации окна

Set debug desktop

View Desktops Set Debug Desktop

Установка конфигурации окна при отладке

New WebSnup Data Module

File New Other WebSnup WebSnup Data Module

Создание модуля данных приложения WebSnup для Web

New WebSnup Page Module

File New Other WebSnup WebSnup Page Module

Создание модуля страницы приложения WebSnup для Web (начиная с Delphi 6)

New WebSnup Application

File New Other WebSnup WebSnup Application

Создание приложения WebSnup для Web

Delphi предоставляет широкие возможности настроить панели по своему усмотрению, добавить в них какие-то быстрые кнопки для часто применяемых команд, убрать кнопки, которыми редко пользуются, сделать некоторые из инструментальных панелей невидимыми.

Палитра компонентов

Палитра компонентов — это витрина той библиотеки компонентов, с которой вы работаете.

Палитра позволяет сгруппировать компоненты в соответствии с их смыслом и назначением. Эти группы или страницы снабжены закладками. Вы можете изменять комплектацию страниц, вводить новые страницы, переставлять их, вносить на страницы разработанные вами шаблоны и компоненты и т.д.

Палитра этой библиотеки компонентов Delphi 7приведена на рис. 2.3. По умолчанию в ней имеются страницы, перечисленные в табл. 2.2.

Рис. 2.3. Палитра компонентов в Delphi 7

Таблица 2.2. Страницы библиотеки VCL

Standard

Стандартная, содержащая наиболее часто используемые компоненты

Additional

Дополнительная, являющаяся дополнением стандартной

Win32

32-битные компоненты в стиле Windows 95/98/2000 и NT

System

Системная, содержащая такие компоненты, как таймеры, плееры и ряд других

Data Access

Доступ к данным

Data Controls

Компоненты отображения и редактирования данных

dbExpress

Связь с данными с помощью dbExpress

DataSnap

Компоненты для связи с сервером приложений при построении многопоточных приложений, работающих с данными

BDE

Доступ к данным через Borland Database Engine — BDE

ADO

Связь с базами данных через Active Data Objects (ADO) — множество компонентов ActiveX, использующих для доступа к информации баз данных Microsoft OLE DB

InterBase

Прямая связь с InterBase, минуя Borland Database Engine (BDE) и Active Data Objects (ADO)

WebServices

Компоненты клиентский приложений Web, использующие доступ к службам Web с помощью SOAP

InternetExpress

Построение приложений InternetExpress — одновременно приложений сервера Web и клиента баз данных с параллельными потоками

Internet

Компоненты для создания серверов Web

WebSnap

Компоненты для создания серверов Web, содержащих сложные страницы, управляемые данными

Decision Cube

Компоненты для многомерного анализа данных

Dialogs

Диалоги, системные диалоги типа «Открыть файл» и др.

Win 3.1

Windows 3.x, компоненты в стиле Windows 3.x

Samples

Образцы, различные интересные, но не до конца документированные компоненты

ActiveX

Примеры компонентов ActiveX

Rave

Компоненты для подготовки отчетов

IndyClients

Компоненты клиентских приложений Internet Direct, дающих доступ к различным протоколам Интернет из приложений Delphi, C++Builder, Kylix

IndyServers

Компоненты серверных Internet Direct (Indy)

Indy Intercepts

Вспомогательные компоненты приложений Internet Direct (Indy)

I/O Handlers

Вспомогательные компоненты приложений Internet Direct (Indy)

IndyMisk

Вспомогательные компоненты приложений Internet Direct (Indy)

СОМ+

Компонент, дающий доступ к каталогу СОМ+, содержащему данные по конфигурации СОМ+

InterBase Admin

Компоненты доступа к возможностям новой версии InterBase

IW Standard

Компоненты форм приложений IntraWeb

IW Data

Компоненты доступа к данным приложений IntraWeb

IW Client Side

Компоненты клиентских приложений IntraWeb

IW Control

Управляющие компоненты приложений IntraWeb

Servers

Оболочки VCL для распространенных серверов СОМ

Поскольку число страниц в Delphi 7 велико и не все закладки видны на экране одновременно, в правой части палитры компонентов имеются две кнопки со стрелками, направленными влево и вправо. Эти кнопки позволяют перемещать отображаемую на экране часть палитры. На некоторых страницах расположено столько компонентов, что они не помещаются в видимой части страницы. В этих случаях на концах страницы появляются дополнительные кнопочки, позволяющие перемещаться вдоль страницы.

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

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

Имена компонентов, соответствующих той или иной пиктограмме, вы можете узнать из ярлычка, появляющегося, если вы задержите над этой пиктограммой курсор мыши. Если вы выберете в палитре компонент и нажмете клавишу F1, то вам будет показана справка по типу данного компонента.

Имена на ярлычках компонент выглядят, например, так: Main Menu, Button и т.д. Однако в Delphi все имена классов в действительности начинаются с символа «Т», например, TMainMenu, TButton. Под такими именами вы можете найти описания соответствующих компонентов во встроенной в Delphi справочной системе.

Окно формы

Основой почти всех приложений Delphi является форма. Ее можно понимать как типичное окно Windows. Форма является основой, на которой размещаютсядругие компоненты. Типичный вид формы Delphi вы можете видеть на рис. 2.1.

Форма имеет те же свойства, что присущи другим окнам Windows. Она имеет управляющее меню в верхнем левом углу, полосу заголовка, занимающую верхнюю часть, кнопки развертывания, свертывания и закрытия окна в верхнем правом углу. Можно изменить вид окна, убрав в нем какие-то кнопки или всю полосу заголовка, сделав его окном с неизменяемыми размерами и т.п.

Во время проектирования форма покрыта сеткой из точек. В узлах этой сетки размещаются те компоненты, которые вы помещаете на форму. Во время выполнения приложения эта сетка, конечно, не видна.

В некоторых случаях при разработке какого-то модуля форма может оказаться вообще ненужной. Но обычно вся работа в Delphi проводится именно на форме.

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

Окно Редактора Кода

Одной из наиболее важных частей среды Delphi является окно Редактора Кода (рис. 2.4). Как правило, слева от него прикреплено окно Исследователя Кода (Code Explorer).

Редактор Кода имеет две страницы: Code (Код) и Diagram (Диаграмма). Закладки этих страниц находятся в нижней части окна. Первая из них содержит коды модулей приложения и тексты других файлов, которые открываются в процессе проектирования. Вторая страница позволяет строить диаграммы, иллюстрирующие взаимоотношения компонентов в приложении.

Страница Code (Код) является полноценным программным редактором. Ее можно настраивать на различный стиль работы, который вам более привычен. В редакторе применяется выделением цветом и шрифтом синтаксических элементов. Жирным шрифтом выделяются ключевые слова Object Pascal. Синим курсивом выделяются комментарии.

Рис. 2.4. Окно Редактора Кода со встроенным окном Code Explorer 

В заголовке окна Редактора Кода отображается имя текущего файла, с текстом которого осуществляется работа. В верхней части окна вы можете видеть также закладки или ярлычки, указывающие текущие открытые файлы. Приложения Delphi могут использовать много исходных файлов, и закладки помогают вам переходить от одного из них к другому. Вы можете также открыть дополнительное окно Редактора Кода (командой View New Edit Window или щелчком в окне правой кнопкой мыши и выбором аналогичного раздела из контекстного меню) и одновременно работать с двумя модулями или с двумя разными фрагментами одного модуля.

В нижней части окна Редактора Кода вы можете видеть строку состояния. В самой левой ее позиции находится индикатор строки и колонки. Это помогает вам понимать, в каком месте кода вы находитесь.

Второй элемент строки — индикатор модификации. Когда вы начинаете новый проект, то код, который Delphi автоматически написала для вас, еще не сохранен. Вы должны сделать это сами командой File Save. Если код изменялся вами или Delphi с того момента, когда вы в последний раз сохраняли его в файле, то в индикаторе модификации (правее индикатора строки и колонки) появляется слово «Modified». Это слово показывает вам, что код, который вы видите, не тот же самый, что на диске.

Третий элемент строки состояния — индикатор режима вставки, который показывает вам, будут ли вводимые символы вставляться в текст или писаться поверх текста. Переключение режима вставки производится клавишей Insert.

В окно Редактора Кода, как и в другие окна Delphi, встроена контекстная справка. Чтобы получить справку по какому-то слову кода (ключевому слову, написанному имени функции и т.п.), достаточно установить курсор на это слово и нажать клавишу F1. Вам будет показана соответствующая тема справки, встроенной в Delphi.

В окне Редактора Кода можно смотреть и редактировать не только автоматически помещаемые в него файлы модулей программы. Вы можете открыть и загрузить в редактор командой File Open или соответствующей быстрой кнопкой также текстовые файлы и файлы HTML, используемые при работе с Интернет. Для файлов HTML имеется возможность предварительного просмотра редактируемой страницы Web.

Инспектор Объектов

Инспектор Объектов (Object Inspector) обеспечивает простой и удобный интерфейс для изменения свойств объектов Delphi и управления событиями, на которые реагирует объект.

Окно Инспектора Объектов (рис. 2.5) имеет две страницы. В верхней части окна имеется выпадающий список всех компонентов, размещенных на форме. В нем вы можете выбрать тот компонент, свойства и события которого вас интересуют.

    

                                                    а)                                                            б)

Рис. 2.5. Страница свойств (а) и страница событий (б) Инспектора Объектов

Страница свойств (Properties) Инспектора Объектов (рис. 2.5, а) показывает свойства того объекта, который в данный момент выделен на форме. Вы можете изменять эти свойства. Например, измените свойство Caption (Надпись) вашей формы, написав в нем «Моя форма», и вы увидите, что эта надпись появится в полосе заголовка вашей формы.

Если щелкнуть на некоторых свойствах, например, на свойстве Color (Цвет), то справа от имени свойства откроется окно выпадающего списка. Нажав в нем на кнопку со стрелкой вниз, вы можете увидеть список возможных значений свойства. Например, смените значение свойства Color с принятого по умолчанию clBtnFace (Цвет поверхности кнопок) на clWindow (Цвет окна). Вы увидите, что поверхность формы изменит свой цвет.

Рядом с некоторыми свойствами вы можете видеть знак плюс, например, свойство BorderIcons. Это означает, что данное свойство является объектом, который в свою очередь имеет ряд свойств.

Найдите, например, свойство Font (Шрифт). Рядом с ним вы увидите знак плюс. Щелкните на этом плюсе или сделайте двойной щелчок на свойстве Font. Вы увидите, что откроется таблица таких свойств, как Color (Цвет), Height (Высота), Name (Имя шрифта) и др. Среди них вы увидите свойство Style (Стиль), около которого тоже имеется знак плюс. Щелчок на этом плюсе или двойной щелчок на этом свойстве раскроет дополнительный список подсвойств, в котором вы можете, например, установить в true свойство fsBold (Жирный). Кстати, для смены true на false и обратно в подобных булевых свойствах не обязательно выбирать значение из выпадающего списка. Достаточно сделать двойной щелчок на значении свойства, и оно изменится. После того, как вы просмотрели или изменили подсвойства,вы можете опять сделать двойной щелчок на головном свойстве или щелчок на знаке минус около него, и список подсвойств свернется.

Страница событий (Events) составляет вторую часть Инспектора Объектов (см. рис. 2.5, б). На ней указаны все события, на которые может реагировать выбранный объект. Например, если вам надо выполнить какие-то действия в момент создания формы (обычно это различные операции настройки), то вы должны выделить событие OnCreate. Рядом с именем этого события откроется окно с выпадающим списком. Если вы уже написали в своем приложении какие-то обработчики событий и хотите при событии OnCreate использовать один из них, вы можете выбрать необходимый обработчик из выпадающего списка. Если же вам надо написать новый обработчик, то сделайте двойной щелчок на пустом окне списка.

Вы попадете в окно Редактора Кода, в котором увидите текст:

procedure TForm1.FormCreate(Sender: TObject);

begin

end;

Курсор будет расположен в пустой строке между ключевыми словами begin и end. Увиденный вами код — это заготовка обработчика события, которую автоматически сделала Delphi. Вам остается только в промежутке между begin и end написать необходимые операторы.

Если вы сделали эти операции, то вернитесь в Инспектор Объектов, выделите в нем, например, событие OnActivate и нажмите в нем кнопку выпадающего списка. Вы увидите в нем введенный вами ранее обработчик события OnCreate. Если вам надо использовать тот же самый обработчик и в событии OnActivate, просто выберите его из списка. Таким образом вы можете избежать дублирования в программе одних и тех же фрагментов кода.

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

В Инспектор Объектов введена возможность фильтрации свойств и событий и возможность группировать их по категориям. Для того чтобы воспользоваться этими возможностями, щелкните в окне Инспектора Объектов правой кнопкой мыши. Во всплывшем меню вы можете выбрать раздел View. Вам будет показан ряд категорий свойств и событий (рис. 2.6). Около каждой категории имеется индикатор. Вы можете включить индикаторы только у некоторых категорий и тогда в Инспекторе Объектов вы увидите события и свойства только указанных категорий. Выбор раздела Toggle переключит видимость разделов: те, которые были видимы, станут невидимы и наоборот. Выбор раздела Аll сделает видимыми все свойства и события, а выбор раздела None сделает все события и свойства невидимыми. Внизу окна Инспектора Объектов указывается, сколько свойств или событий невидимо в данный момент. На приводившемся ранее рис. 2.5 вы можете видеть, что на странице свойств невидимы (hidden) 2 свойства, а на странице событий видны все события (All shown). Невидимые свойства — следствие выключенного в меню на рис. 2.6 индикатора категории Legacy.

В том же меню, всплывающем при щелчке правой кнопкой мыши в окне Инспектора Объектов, вы можете выбрать раздел Arrange и в нем установить одну из двух возможностей: by Name — упорядочить свойства и события в алфавитной последовательности их имен, или by Category — упорядочить их по категориям. При упорядочивании по категориям форма представления событий и свойств кардинально меняется (рис. 2.7). В окне отображаются категории с символами «+», при щелчке на которых раскрывается список элементов, относящихся к данной категории. При этом некоторые свойства могут попасть одновременно в несколько категорий. Но это не имеет значения: вы можете менять их значения в любой категории и они синхронно изменятся во всех остальных категориях.

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

Рис. 2.6. Список категорий свойств

Рис. 2.7. Страница свойств Инспектора Объектов, упорядоченная по категориям

Очень полезной особенность Инспектора Объектов является отображение компонентов, на которые имеются ссылки в данном компоненте. Дело в том, что одни компоненты часто ссылаются на другие, используемые для каких-то целей. Например, на форме обычно располагается компонент главного меню MainMenu, на который ссылается форма. А этот компонент, в свою очередь, ссылается на список изображений - компонент ImageList. И подобных ссылок на присоединенные компоненты и объекты в приложениях довольно много. В Инспекторе Объектов, во-первых, свойства, в которых могут содержаться ссылки на другие компоненты или объекты, выделяются красным цветом. А главное — если в подобном свойстве действительно записана ссылка, то около этого свойства появляется символ «+». Если щелкнуть на нем, то раскроется список свойств присоединенного компонента. Эти свойства выделяются зеленым цветом, чтобы не путать их со свойствами самого компонента. Таким образом, не выходя из окна Инспектора Объектов и не делая лишних движений, можно задать свойства целой цепочки присоединенных объектов.

Присоединенные объекты присутствуют и на странице событий Инспектора Объектов. Таким образом, и обработчики событий цепочки присоединенных компонентов можно задавать, не выходя из окна Инспектора Объектов.

Описанные свойства Инспектора Объектов и его внешний вид можно настраивать.

Перетаскивание и встраивание окон в ИСР

В Интегрированной Среде Разработки Delphi, как и в оконных компонентах Delphi, широко используется технология Drag&Docперетаскивание и встраивание окон. Одно из встраиваемых окон вы уже видели: окно Исследователя Кода (Code Explorer). Если оно у вас сейчас отсутствует на экране (вы его закрыли), то выполните команду View Code Explorer. По умолчанию оно встроено в окно Редактора Кода (рис. 2.4, б). Есть также еще много встраиваемых окон: окно Менеджера Проекта (Project Manager), окно Наблюдаемых Величин (Watch List) и много других.

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

  •  сокращенная полоса системного меню, включающая обычно только кнопку закрытия окна;
  •  наличие в контекстном меню переключателя Dockable (Встраиваемое). Если снять метку с этого переключателя, окно перестанет быть встраиваемым. В дальнейшем вы можете опять пометить этот переключатель, и окно снова станет встраиваемым;
  •  при перетаскивании встраиваемого окна размеры его рамки изменяются, если окно перемещается в пределах другого окна.

Встраивание окон позволяет вам экономить площадь экрана. Для того чтобы переместить встраиваемое окно, надо потянуть курсором мыши за двойную рамку на одной из его границ. При этом можно вынуть его из окна-контейнера и сделать самостоятельным — это так называемое плавающее окно. Для перевода окна в плавающее состояние не обязательно тянуть за двойную рамку — достаточно сделать на ней двойной щелчок. Можно встроить окно Code Explorer в окно Редактора Кода иначе, чем это принято по умолчанию, например, снизу, чтобы не уменьшать видимую длину строк кода. Во встроенном состоянии можно курсором мыши передвинуть границы окон, практически убрав при желании одно из окон, которое в данный момент не нужно.

Если вы не хотите, чтобы в данный момент перетаскиваемое окно могло встроиться в другое, держите в процессе перетаскивания нажатой клавишу Ctrl. Это запретит встраивание.

Очень удобно встраивать окна в Инспектор Объектов. Они при этом ложатся на отдельные страницы, совершенно не занимая на экране дополнительного места (рис. 2.8). А когда требуется, вы всегда можете посмотреть требуемое окно, щелкнув на его закладке. Поскольку не все закладки могут уместиться в заголовке окна, в нем появляются на уровне закладок кнопки со стрелками, направленными влево и вправо (см. рис. 2.8). С их помощью можно перейти на страницу, закладка которой не видна.

Технология встраивания окон Drag&Doc реализована также в инструментальных панелях. Вглядитесь (рис. 2.1), и вы увидите, что в действительности ИСР содержит 6 панелей (плюс невидимая по умолчанию панель Internet), разделенных двойными рамками. Потяните какую-нибудь из панелей (например, палитру компонентов) за эту рамку, и увидите, что вы можете ее перемещать, например, перевести ее в дополнительный третий ряд панелей, чтобы увеличить доступную длину, или вообще перевести в плавающее состояние. Таким образом, вам предоставлены огромные возможности по преобразованию инструментальных панелей.

Рис. 2.8. Окно Code Explorer, встроенное в качестве отдельной страницы в окно Инспектора Объектов

Управление конфигурациями окон ИСР

Каждый пользователь открывает те окна, которые требуются ему для того или иного вида работ, и располагает их удобным для себя образом. Одни окна развернуты, другие свернуты, какие-то окна встроены друг в друга. Так создается удобная для пользователя конфигурация окон. Хотелось бы запоминать эту конфигурацию, чтобы не повторять работу по оборудованию своего рабочего места каждый раз при запуске Delphi. Запоминание конфигурации можно осуществить несколькими способами.

Можно сделать так, чтобы при очередном запуске Delphi восстанавливалась конфигурация, которая была на момент завершения предыдущего сеанса работы. Причем не только конфигурация окон, но и загруженный в них проект, с которым вы работали в последний раз. Так что вы сразу можете продолжать работу над тем же проектом. Это делается выполнением команды Tools Environment Options. В открывшемся диалоговом окне настроек среды проектирования на странице Preferences в группе опций Autosave надо включить опцию Project desktop. Тогда текущая конфигурация и открытые файлы проекта автоматически сохраняются при завершении сеанса работы с Delphi и автоматически восстанавливаются при начале нового сеанса. При включении этой опции конфигурация окон запоминается также в каждом проекте. Так что если вы впоследствии откроете какой-то проект, с которым работали ранее, то восстановится конфигурация всех окон, которые были открыты в момент окончания предыдущего сеанса работы с данным проектом.

Имеются расширенные возможности сохранения конфигураций. Установив на экране некоторую конфигурацию окон, вы можете выполнить команду View Desktops Save Desktop или нажать соответствующую ей быструю кнопку

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

  •  совокупность отрытых окон;
  •  размеры и расположение окон на экране (но не сохраняется их положение в так называемой Z-последовательности, определяющей в случае взаимного перекрытия окон, какие из них находятся поверх других);
  •  состояние каждого окна (свернутое, развернутое, встроенное в другое окно);
  •  настройки окна (например, в Инспекторе Объектов сохраняется способ отображения информации — по алфавиту или по категориям и установки фильтрации, во встраиваемых окнах сохраняется состояние индикатора Docable).

Введенные вами конфигурации вы можете впоследствии реорганизовать, удалив ненужные командой View Desktops Delete.

Конфигурация различных вспомогательных окон, установленная для одной из запомненных конфигураций, используется как конфигурация отладки. Какая именно — устанавливается с помощью команды View Desktops Set Debug Desktop или соответствующей ей быстрой кнопки

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

2.3. Первые шаги — первые собственные приложения

Теперь вы имеете некоторое представление об основных элементах Интегрированной Среды Разработки (ИСР) Delphi. Самое время попробовать написать первое приложение.

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

  1.  Запустите Delphi с помощью меню Windows: Пуск Программы Borland Delphi 7 Delphi 7. Если Delphi уже работает и вы уже делали какие-то эксперименты с формой, то откройте новое приложение. Для этого вам надо выполнить команду File New и в открывшемся каскадном меню выбрать раздел Application. Ответьте «No» на вопрос Delphi, хотите ли вы сохранить изменения в вашем проекте.
  2.  Перенесите на пустую форму, которая открылась вам, кнопку типа TButton со страницы Standard палитры компонентов. Для этого выделите пиктограмму кнопки  и затем щелкните курсором мыши в нужном вам месте формы. На форме появится кнопка, которой Delphi присвоит имя по умолчанию — Button1.
  3.  Аналогичным образом перенесите на форму с той же страницы Standard палитры компонентов метку Label . В этой метке в процессе выполнения приложения будет появляться текст при нажатии пользователем кнопки. Delphi присвоит ей имя Label1.
  4.  Разместите компоненты на форме примерно так, как показано на рис. 2.9, а. При этом уменьшите до разумных размеров окно формы, так как в вашем первом приложении никаких других компонентов не будет.
  5.  Выделите на форме компонент Button1 — кнопку. Перейдите в Инспектор Объектов и измените ее свойство Caption (Надпись), которое по умолчанию равно Button1, на Пуск.
  6.  Укажите метке Label1, что надписи на ней надо делать жирным шрифтом. Для этого выделите метку, в окне Инспектора Объектов раскройте двойным щелчком свойство Font (Шрифт), затем так же двойным щелчком раскройте подсвойство Style (Стиль) и установите в True свойство fsBold (Жирный).

     

                                                       а)                                                                              б)

Рис. 2.9. Форма (а) и окно в процессе выполнения (б) вашего приложения

  1.  Сотрите текст в свойстве Caption метки Label1, чтобы он не отображался, пока пользователь не нажмет кнопку приложения.
  2.  В заголовке окна формы напишите какой-нибудь осмысленный текст. Для этого надо щелкнуть на форме, в окне Инспектора Объектов найти свойство Caption формы и написать в нем, например, Приложение Delphi.

Теперь вам осталось только написать оператор, который заносил бы в свойство Caption метки Label1 нужный вам текст в нужный момент. Этот момент определяется щелчком пользователя на кнопке. При щелчке в кнопке генерируется событие OnClick. Следовательно, обработчик этого события вы и должны написать.

  1.  Выделите кнопку Button1 на форме, перейдите в Инспектор Объектов, откройте в нем страницу Events (События), найдите событие кнопки OnClick и сделайте двойной щелчок в окне справа от имени этого события. Это стандартный способ задания обработчиков любых событий. Но перейти в обработчик события OnClick (только этого события) кнопки можно и иначе: достаточно сделать двойной щелчок на компоненте Button1 на форме. В обоих случаях вы окажетесь в окне Редактора Кода и увидите там текст:

procedure TForm1.Button1Click(Sender: TObject);

begin

end;

Заголовок этой процедуры складывается из имени класса формы (TForm1), имени компонента (Button1) и имени события без префикса On (Click).

  1.  Напишите в обработчике оператор задания надписи метки Label1. Этот оператор может иметь вид:

Label1.Caption:= 'Это мое первое приложение!';

Таким образом, полностью обработчик события должен иметь вид:

procedure TForm1.Button1Click(Sender: TObject);

begin

 Label1.Caption:= 'Это мое первое приложение!';

end;

Оператор, который вы написали, означает следующее. Символы «:=» обозначают в операцию присваивания, в которой тому, что написано перед этими символами, присваивается значение того, что написано после символов присваивания. Слева вы написали: Label1.Caption. Это значит, что вы присваиваете значение свойству Caption компонента Label1. Все указания свойств и методов производятся аналогичным образом: пишется имя компонента, затем ставится точка, а затем без пробела пишется имя свойства или метода. В данном случае свойству Caption вы присваиваете строку текста «Это мое первое приложение!».

Если вы написали первый идентификатор оператора — Label1l, поставили точку и ненадолго задумались, то вам всплывет подсказка (рис. 2.10), содержащая список всех свойств и методов метки. Это начал работать Code Insight (Знаток Кода), который стремится подсказать вам свойства и методы компонентов, аргументы функций и их типы, конструкции операторов. Вы можете выбрать из списка нужное ключевое слово, нажать клавишу Enter и выбранное слово (свойство, метод) окажется вписанным в текст. Можете поступить иначе: начать писать нужное свойство. Тогда Code Insight сам найдет по первым введенным символам нужное свойство. Когда вы увидели, что нужное слово найдено, можете его не дописывать, а нажать Enter, и Code Insight допишет его за вас.

Рис. 2.10. Подсказка Code Insight (Знатока Кода)

Подсказки Code Insight по умолчанию упорядочены по областям видимости и категориям, что не очень удобно. Вы можете изменить характер упорядочивания, щелкнув в окне Code Insight правой кнопкой мыши и включив во всплывшем меню раздел Sort by Name (Сортировка по алфавиту).

Подсказки Code Insight очень удобны в тех случаях, когда вы не помните точно последовательность перечисления параметров какой-нибудь функции, или когда не уверены в имени какого-то свойства. Но иногда, когда вы хорошо освоитесь с Delphi, эти подсказки, может быть, начнут вас раздражать. При настройке ИСР вы можете временно отключить Знатока Кода или увеличить задержку, с которой он срабатывает.

Итак, ваше приложение готово. Можете откомпилировать и выполнить его. Для этого выполните команду Run Run, или нажмите соответствующую быструю кнопку

, или нажмите «горячую» клавишу F9. Если вы ничего не напутали, то после недолгой компиляции перед вами появится окно вашего первого приложения. Нажав в нем кнопку Пуск, вы увидите указанную вами строку текста (рис. 2.9, б). Можете попробовать различные манипуляции с окном: перемещение его, изменение размеров его рамки курсором мыши, свертывание и развертывание. В заключение закройте приложение, щелкнув на кнопке  в его правом верхнем углу.

А теперь испытайте свои силы в построении чуть-чуть более сложного приложения, которое хоть что-нибудь вычисляет. Создайте приложение, которое при нажатии кнопки перемножало бы два числа, введенных пользователем, и показывало бы результат умножения.

При построении этого приложения мы используем новые типы компонентов — окна редактирования. Кроме того, для разнообразия, будем выводить результат не в метку Label, а в панель Panel, просто для того, чтобы испытать новый компонент.

  1.  Откройте новое приложение. Перенесите на него со страницы библиотеки Additional два окна редактирования с присоединенными к ним метками LabeledEdit , а со страницы библиотеки Standard — одну панель Panel , одну кнопку Button  и одну метку Label  для надписи. Разместите все это примерно так, как показано на рис. 2.11, а.

   

                              а)                                                              б)                                                            в)

Рис. 2.11. Исходная форма второго приложения (а), окончательная форма (б) и окно во время выполнения (в)

  1.  Измените надписи в метках компонентов LabeledEdit и Label1 на что-то осмысленное, например, на Число 1, Число 2, Результат. Для этого щелкните на символе «+» в свойстве EditLabel этих компонентов и измените надпись в свойстве Caption раскрывшихся списков свойств меток. Полезно задать для меток жирный шрифт, как вы это делали в предыдущем примере.
  2.  Замените свойство Caption кнопки, например, на Расчет. Очистите свойство Caption у панели. В свойстве Text (Текст) окон редактирования задайте «1» — начальное значение текста.
  3.  Попробуйте поварьировать такими свойствами панели, как BevelInner и BevelOuter, которые определяют вид (утопленный — bvLowered или выпуклый - bvRaised) основного поля и рамки панели. Например, можете установить BevelInner = bvLowered и BevelOuter = bvRaised.

В итоге ваша форма приобретет вид, показанный на рис. 2.11, б.

  1.  Осталось написать обработчик щелчка кнопки. Единственный оператор этого обработчика может иметь вид:

Panel1.Caption:=LabeledEdit1.Text+'*'+LabeledEdit2.Text+'='+

               FloatToStr(StrToFloat(LabeledEdit1.Text)*

               StrToFloat(LabeledEdit2.Text));

Попробуем проанализировать приведенный оператор. Начало его вам уже знакомо: вы присваиваете свойству Caption компонента Panel1 значение выражения, указанного в правой части оператора. Это выражение должно иметь тип строки текста. Начинается строка с текста, введенного пользователем в окно редактирования LabeledEdit1 — этот текст хранится в свойстве Text. Затем вы прибавляете к этому тексту символы «*». Знак «+» в выражениях для строк означает конкатенацию — сцепление двух строк символов. Затем аналогичным образом к строке добавляется текст второго окна редактирования и символы «=». После этого мы хотим вставить в строку результат перемножения двух чисел. Этот результат будет числом и, чтобы вставить его в текст, надо сначала преобразовать это число в строку. Эту операцию выполняет функция FloatToStr, которая преобразует заданный ей параметр типа действительного числа в строку символов. Осталось получить само произведение двух чисел. Но числа заданы пользователем в виде текстов — строк символов в окнах редактирования. Прежде, чем перемножать, эти строки надо перевести в числа. Эту операцию выполняет функция StrToFloat, преобразующая символьное изображение числа в его значение типа действительного числа. Знак «*», указанный между двумя вызовами функции StrToFloat, обозначает операцию умножения.

Приложение готово. Можете его сохранить — ведь оно все-таки умеет делать нечто полезное. Для этого лучше всего создать отдельный подкаталог (папку Windows) и выполнить команду File Save All. Проще эту команду выполнять с помощью соответствующей быстрой кнопки

.

Откомпилируйте свое приложение и выполните его. Убедитесь, что оно нормально работает (рис. 2.11, в) и мгновенно перемножает самые замысловатые многоразрядные числа.

2.4. Проекты Delphi

Организация проекта в Delphi

Проект Delphi состоит из форм, модулей, установок параметров проекта, ресурсов и т.д. Вся эта информация размещается в файлах. Многие из этих файлов автоматически создаются Delphi, когда вы строите ваше приложение. Ресурсы, такие, как битовые матрицы, пиктограммы и т.д., находятся в файлах, которые вы получаете из других источников или создаете при помощи многочисленных инструментов и редакторов ресурсов, имеющихся в вашем распоряжении. Кроме того, компилятор также создает файлы. Давайте познакомимся с некоторыми из этих файлов, так как знание того, какие файлы какую информацию содержат, не раз поможет вам в трудных ситуациях.

Когда вы проектируете приложение, Delphi создает следующие файлы:

Файл проекта (.dpr)

Этот текстовый файл используется для хранения информации о формах и модулях. В нем содержатся операторы инициализации и запуска программы на выполнение.

Файл модуля (.pas)

Каждой создаваемой форме и каждому фрейму, соответствует текстовый файл модуля, используемый для хранения кода. Иногда вы можете создавать модули, не связанные с формами. Многие из функций и процедур Delphi хранятся в модулях.

Файл формы (.dfm)

Это двоичный или текстовый файл, который создается Delphi для хранения информации о формах. Каждому файлу формы соответствует файл модуля (.pas).

Файл параметров проекта (.dfo)

В этом файле хранятся установки параметров проекта.

Файл информации о пакетах (.drf)

Этот бинарный файл используется Delphi при работе с пакетами.

Файл ресурсов (.res)

Этот бинарный файл содержит используемую проектом пиктограмму и прочие ресурсы.

Файл группы файлов (.bpg)

Это файл, создаваемый, если вы работаете с группой проектов.

Файл пакета (.dpk)

Этот двоичный файл пакета (package).

Файлы резервных копий (.~dp, ~df, ~ра)

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

Файл конфигурации окон (.dsk)

Файл хранит конфигурацию всех окон.

Файлы диаграмм (.ddp)

Файлы диаграмм, создаваемых на странице диаграмм окна Редактора Кода.

Следующая группа файлов создается компилятором:

Исполняемый файл (.ехе)

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

Объектный файл модуля (.dcu)

Это откомпилированный файл модуля который компонуется в окончательный исполняемый файл.

Динамически присоединяемая библиотека (.dll)

Этот файл создается в случае, если вы проектируете DLL.

Файл содержания пакета (.dcp)

Это двоичный файл, содержащий заголовок пакета и список принадлежащих ему файлов .dcu.

Откомпилированный файл пакета времени выполнения (.bpl)

Это пакет времени выполнения — файл библиотеки DLL с определенной спецификой Delphi.

И, наконец, другие файлы Windows, которые могут использоваться Delphi:

Файлы справки (.hlp)

Это стандартные файлы справок Windows, которые могут быть использованы приложением Delphi.

Файлы изображений или графические файлы (.wmf, .bmp, .ico)

Эти файлы обычно используются в приложениях Windows для создания привлекательного и дружественного пользовательского интерфейса.

Главной частью вашего приложения является файл проекта (.dpr), содержащий код на языке Delphi, с которого начинается выполнение вашей программы и который обеспечивает инициализацию других модулей. В большинстве случаев вы можете создать законченное приложение Delphi, так и не взглянув на этот файл. Он создается и модифицируется Delphi автоматически в процессе вашей разработки приложения. Имя, которое вы даете файлу проекта, когда сохраняете его, становится именем исполняемого файла.

Приведенный ниже код является примером того, как выглядит файл проекта в случае, если вы, начав новый проект, не изменяли в нем имен файлов и форм.

program Project1;

uses

 Forms,

 Unit1 in 'Unit1.pas' {Form1};

{$R *.res}

begin

 Application.Initialize;

 Application.CreateForm(TForm1, Form1);

 Application.Run;

end.

Этот код содержит всего три выполняемых оператора: первый из них инициализирует приложение, второй создает форму Form1, а третий запускает выполнение приложения.

Все изменения файла проекта при добавлении новых форм, изменении имен форм и т.п. поддерживаются Delphi автоматически. Если вам необходимо посмотреть исходный файл проекта, надо выполнить команду Project View Source.

Информация о формах Delphi хранится в двух файлах. В файле с расширением .dfm хранится информация о внешнем виде формы, ее размерах, местоположении на экране и т.д. В текстовом файле с расширением .pas хранится код модуля, соответствующего данной форме. Имена обоих этих файлов одинаковы. Вы задаете это имя, когда в первый раз сохраняете ваш модуль.

Чтобы посмотреть файл формы в текстовом виде в окне Редактора Кода, надо щелкнуть на форме правой кнопкой мыши и из контекстного меню выбрать раздел View as Text, а перейти обратно к графическому представлению формы можно, щелкнув правой кнопкой мыши по тексту в окне Редактора Кода и выбрав раздел View as Form.

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

Чтобы создать в проекте новый модуль, не связанный с какой-либо формой, надо выполнить команду File New Other и в открывшемся окне New Items на странице New щелкнуть на пиктограмме Unit.

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

Теперь надо сказать несколько слов о выполняемом файле .ехе и о файлах пакетов. В Delphi можно разрабатывать прикладные программы двух видов — автономные выполняемые файлы .ехе и программы с поддержкой пакетов (packages) времени выполнения. В последнем случае размер выполняемого файла существенно (на порядок и более) сокращается, но зато вы должны поставлять пользователю не только выполняемый модуль, но и файлы поддерживающих его пакетов. Во время отладки всегда имеет смысл включать поддержку пакетов времени выполнения. Это существенно сократит размеры выполняемых файлов и сбережет немало дискового пространства.

Для экономии места на диске при параллельной разработке нескольких проектов или нескольких вариантов одного проекта имеет смысл в процессе разработки включить поддержку пакетов времени выполнения. Это позволит более чем на порядок сократить размеры генерируемых выполняемых модулей.

Для использования этой возможности выполните команду Project Options. В раскрывшемся окне опций проекта выберите страницу Packages и на странице Packages включите индикатор Built with runtime packages. Одновременно полезно включить в том же окне индикатор Default, что обеспечит статус этой установки как установки по умолчанию для всех ваших будущих проектов.

Создание и сохранение нового проекта

Заведите себе за правило отводить для каждого нового проекта новый подкаталог (папку Windows). Удобная структура каталогов существенно облегчает работу над проектами.

Новый каталог вы можете создать средствами Windows перед началом проекта, или создавать его можно в окне стандартного диалога сохранения файлов с помощью соответствующей быстрой кнопки.

Начать новый проект можно несколькими способами. Один уже рассматривался выше: команда File New Application. Еще один путь — команды File New Other) или соответствующая ей быстрая кнопка

. При выборе этой команды открывается окно New Items (Новые элементы).

Это окно является витриной Object Repository (Депозитария объектов) — хранилища образцов компонентов, форм, фреймов и проектов. Вы можете и сами создавать какие-то свои формы, компоненты, фреймы, проекты и включать их в Депозитарий.

Если надо открыть новый проект, то это можно сделать, щелкнув на пиктограмме Application (Приложение) , расположенной на странице New (Новый).

Чтобы получить пояснения по содержащимся в Депозитарии объектам, можно щелкнуть в окне правой кнопкой мыши и из контекстного меню выбрать форму отображения View Details (Подробности). Форма отображения изменится, и вы сможете увидеть краткие пояснения предлагаемых вам вариантов.

Рис. 2.12. Приложение с формой текстового редактора из Депозитария

Проекты, выбираемые на странице Projects, включают в себя уже не просто пустые формы. Например, щелкнув на пиктограмме , вы создадите приложение с формой, показанной на рис. 2.12. Это почти готовый текстовый редактор, который вы можете, конечно, как угодно перерабатывать, добавлять новые функции, переводить надписи на русский язык и т.д. Пиктограмма создаст вам многооконный текстовый редактор, в котором реализованы все стандартные функции подобных приложений MDI (приложений с множеством документов типа Word, Excel и т.п.). Выбрав пиктограмму , вы попадете под опеку одного из Мастеров (Wizard) Delphi, который проведет вас через ряд диалоговых окон. Отвечая на их вопросы, вы сможете создать приложение с меню, инструментальной панелью, диалогами и т.д. Вы сможете указать, какие меню вам нужны, задать шаблоны файлов, используемые в диалогах открытия и сохранения файлов, сформировать по своему желанию инструментальную панель. В результате вы получите форму, сгенерированную Мастером Приложений.

Сохранение проекта, его повторное открытие

Первое действие, которое рекомендуется выполнить после создания нового проекта — сохранить его в нужном каталоге. И в течение работы над проектом почаще выполняйте сохранение.

Сохранить проект можно командой File Save All. Удобно также использовать соответствующую быструю кнопку

. При первом сохранении Delphi спросит у вас имя файла сохраняемого модуля, а затем — имя файла проекта. Тут надо иметь в виду, что Delphi не допускает одинаковых имен модулей и проектов. Поэтому задаваемые вами имена файлов должны быть разными.

Не задавайте одинаковые имена различным файлам и вообще стремитесь не использовать в проекте повторяющиеся имена. Всегда при сохранении проектов и модулей задавайте осмысленные имена файлов.

Рекомендации по созданию нового проекта сводятся к следующему:

  •  создайте новый каталог для своего нового проекта;
  •  создайте новый проект командой File New Application;
  •  сразу сохраните проект и файл модуля командой File Save All.

В последующих сеансах работы вы можете открыть сохраненный проект командой File Open Project. Но если вы работали с проектом недавно, то много удобнее открыть его командой File Reopen. А еще удобнее воспользоваться стрелкой рядом с соответствующей этой команде быстрой кнопкой . В обоих случаях открывается окно, в котором вы легко найдете несколько проектов, с которыми работали в последнее время, а также ряд файлов, с которыми вы работали.

Имеется еще более удобный способ автоматически открывать при загрузке Delphi тот проект, с которым вы работали в предыдущем сеансе. Для этого надо выполнить команду Tools Environment Options. В открывшемся многостраничном диалоговом окне надо перейти на страницу Preferences и включить индикатор Project desktop группы опций автосохранения Autosave options. Тогда при каждом очередном запуске Delphi будет загружаться ваше последнее приложение предыдущего сеанса и будут открываться все окна, которые были открыты в момент предыдущего выхода из Delphi. Это очень удобно, если вы намерены продолжать работу над тем же проектом.

Вы можете сохранить свой проект в Депозитарии. Впоследствии при появлении схожей задачи вы можете заимствовать его оттуда, что-то в нем изменить и таким образом сэкономить себе много времени.

Менеджер проектов

В управлении проектом существенную помощь может оказать Project Manager (Менеджер Проектов). Он является не только и не столько инструментом управления проектом, сколько инструментом работы с группами проектов. Группа проектов — это группа родственных проектов, с которыми удобно работать параллельно. Например, это могут быть проекты клиента и сервера, обменивающихся какой-то информацией, или проект, создающий библиотеку DLL, и проект, использующий ее.

Открывается Менеджер Проектов командой View Project Manager. Если в данный момент нет открытого проекта, то в окне Менеджера Проектов будет написано <No Project Group>. Если же какой-то проект открыт, то вид окна Менеджера Проектов показан на рис. 2.13. В этом примере формируется группа с именем по умолчанию ProjectGroup1, содержащая только один открытый проект. В окне виден состав проекта в виде иерархического дерева. Двойной щелчок на вершине, связанной с текстом модуля или формой, открывает соответственно текст модуля в окне Редактора Кода или форму. Так что из окна Менеджера Проектов очень удобно осуществлять навигацию по сложным проектам с множеством модулей и форм.

Рис. 2.13. Окно Менеджера Проектов в Delphi 7 с двумя проектами в группе

Кнопка New позволяет включить в группу новый проект. Действие кнопки Remove (Удалить) зависит от того, какая вершина выделена в окне Менеджера Проекта. Если выделена вершина проекта, то из группы удаляется проект. Если выделена вершина модуля или его текста, то удаляется данный модуль. Впрочем, модуль из проекта вы можете также удалить, если выделите интересующий вас модуль и щелкнете правой кнопкой мыши. В контекстном меню будут разделы Open (Открыть), Remove From Project (Удалить из проекта), Save (Сохранить), Save As (Сохранить как) и ряд других. Удаление выделенного модуля происходит также просто при нажатии клавиши Delete.

Если вы выделите в окне не модуль, а проект — имя файла.ехе, и щелкнете правой кнопкой мыши, то всплывет уже другое меню, в котором будут, в частности, разделы Add (Добавить новую форму или модуль), Remove File (Удалить файл) — появится диалоговое окно, в котором вы можете выбрать удаляемый модуль, Save (Сохранить проект), Options (вызов окна опций выделенного проекта) и ряд других.

Добавить в группу еще один проект можно двумя способами.

Если вы хотите добавить новый проект, вы можете щелкнуть на кнопке , или выделить в окне имя группы проектов, щелкнуть правой кнопкой мыши и выбрать из контекстного меню раздел Add New Project (Добавить новый проект). Вы попадете в окно Депозитария и можете выбрать в нем вид открываемого проекта, в частности, Application — новый проект с пустой формой.

Если же вы хотите добавить в группу один из разработанных вами ранее проектов, то, выделив в окне имя группы проектов и щелкнув правой кнопкой мыши, надо выбрать из всплывшего меню раздел Add Existing Project (Добавить существующий проект). Далее в обычном окне открытия файла вы можете указать добавляемый файл проекта .dpr.

При добавлении в группу нового проекта в окне Менеджера Проектов будет отображаться уже информация о всех проектах группы. Вы можете сохранить файл вашей группы, если выполните команду File Save As или если выделите в окне Менеджера Проектов имя группы, щелкнете правой кнопкой мыши и из всплывшего меню выберете команду Save Project Group As. Группа проектов сохраняется в файле с расширением .bpg. В дальнейших сеансах работы вы можете открыть этот файл той же командой File Open Project или File Reopen, которой вы открываете проект.

Окно Менеджера Проектов — встраиваемое, так что вы можете встроить его, например, в окно Инспектора Объектов, и оно не будет занимать на экране лишнего места.

Теперь посмотрим, что дает нам объединение нескольких проектов в группу. Прежде всего, вы можете параллельно работать над всеми проектами группы, открыв их модули в окне Редактора Кода. Для того чтобы открыть нужный модуль, достаточно сделать двойной щелчок на его имени в окне Менеджера Проектов. Вы можете также выполнить любой проект группы. В каждый данный момент активным является один из проектов. Имя активного проекта выделено в окне Менеджера Проектов жирным шрифтом. Если вы выполните команду Run Run или нажмете F9, то именно этот проект будет компилироваться и выполняться. Вы можете сделать активным другой проект. Это можно сделать, выделив нужный проект в окне Менеджера Проектов и щелкнув на кнопке . Второй способ — щелкнуть на имени проекта, который надо активизировать, правой кнопкой мыши и выбрать в контекстном меню команду Activate. Третий способ добиться того же — выбрать имя выполняемого файла проекта в выпадающем списке вверху окна Менеджера Проектов. Наконец, четвертый способ — нажать кнопку справа от быстрой кнопки выполнения Run  и из выпавшего списка выбрать тот исполняемый файл, который вы хотите запустить.

Описанные приемы позволяют, если вы работаете в Windows XP, одновременно выполнять и отлаживать несколько проектов одной группы. Для этого сначала надо выполнить компиляцию всех проектов командой Project Compile All Project. После этого вы можете активизировать один файл и запустить его на выполнение. Затем, не закрывая его, вернуться в ИСР Delphi, активизировать другой проект группы и тоже запустить его на выполнение. При этом у вас окажется два выполняемых файла проекта, причем вы можете отлаживать их совместную работу (о способах отладки программ будет рассказано позднее).

В Менеджер Проектов введена удобная возможность — перетаскивать файлы мышью. Вы можете внутри группы перетащить модуль из проекта в проект. Средствами Windows (папками или программой «Проводник») вы можете перетащить аналогичным образом модуль из любого каталога в окно Менеджера Проектов. Он включится в тот проект, который в данный момент является активным. Эта особенность Менеджера Проектов — еще одна возможность включать в проект модули (формы), разработанные ранее для других проектов.

Копирование модулей может осуществляться не только перетаскиванием, но и с использованием буфера обмена Clipboard. Вы можете выделить в окне Менеджера Проектов в каком-то проекте вершину модуля и выполнить команду Edit Сору или просто нажать клавиши Ctrl + C — копирование в Clipboard. Затем вы можете выделить вершину другого проекта в той же группе или открыть другую группу проектов и выделить в ней нужный проект, после чего выполнить команду Edit Paste или нажать клавиши Ctrl + V. Модуль скопируется в новый проект.

Последовательность размещения вершин в Менеджере Проектов определяет последовательность их компиляции при выполнении команд Project Build All Projects и Project Compile All Projects. Переместить проект в начало или конец списка можно соответственно командами контекстного меню Build Sooner и Build Later. Команды Compile All from Here и Build All from Here соответственно компилируют и создают все проекты, начиная с выделенного в Менеджере Проектов и до конца списка.

Завершение проекта, задание учетной информации

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

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

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

Для задания или просмотра этой информации надо выполнить команду Project Options и в открывшемся окне опций проекта перейти на страницу Version Info (рис. 2.14). Указанная на данной странице информация заносится в выполняемый файл и становится доступна пользователю, когда он, работая в Windows, щелкает правой кнопкой мыши на пиктограмме вашего приложения и выбирает команду Свойства.

Рис. 2.14. Страница Version Info окна Project Options

Основная опция страницы Version Info окна опций проекта — Include version information in project. Если она не установлена, то все окна страницы доступны только для чтения. Это позволяет просто посмотреть информацию о версии вашего прошлого приложения, если, конечно, вы позаботились о том, чтобы ввести ее в приложение. Если же вы установите включите флажок Include version information in project, то все окна страницы станут доступны для ввода информации.

Окна группы Module Version Number позволяют вам задать номер версии, состоящий из четырех цифр, разделенных точками. Например, 2.3.1.0. Этот номер пользователь видит в верхней части окна свойств программы. Индикатор Auto-increment build number позволяет автоматизировать изменение последней из этих цифр. Если вы включили этот индикатор, последняя цифра будет увеличиваться на единицу каждый раз, когда вы будете выполнять команду Project Build All. При других командах компиляции цифра изменяться не будет.

Группа индикаторов Module Attributes указывает назначение версии. Эти индикаторы можно заполнять для себя в чисто информационных целях, например: Debug Build — отладка, Pre-Release — версия не для коммерческого использования, DLL — проект DLL, Special Build — версия получена в стандартном режиме компиляции, Private Build — версия построена не в стандартном режиме компиляции.

Окно Language указывает кодовую страницу системы пользователя, которая нужна для запуска приложения, т.е. указывает язык. Соответственно в окне свойств программы при выделении пользователем строки Язык он увидит язык приложения (константа $0422 соответствует украинскому языку). Окно Language заполняется автоматически в зависимости от установленной в системе кодовой страницы.

Список Key/Value включает в себя стандартные сведения о программном продукте: CompanyName (Производитель), FileDescription (Описание), File Version (Версия продукта), InternalName (Внутреннее имя), LegalCopyright (Авторские права), LegalTrademarks (Товарные знаки), OriginalFilename (Исходное имя файла), РгоductName (Название продукта), ProductVersion (Версия продукта), Comments (Комментарий). Перемещая курсор в этом окне, пользователь может читать то, что вы занесли в список Key/Value. Вообще говоря, для коммерческого продукта все строки списка, кроме LegalCopyright, LegalTrademarks и Comments, должны заполняться, а эти три строки могут заполняться при необходимости.

Выводы

  1.  Объектно-ориентированное программирование (ООП) – это технология создания сложного программного обеспечения, основанная на представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного типа (класса), а классы образуют иерархию с наследованием свойств. Взаимодействие программных объектов в такой программе осуществляется путем передачи сообщений.
  2.  Основными понятиями ООП являются:
  •  класс – способ описания сущности, определяющий состояние и поведение, зависящее от этого состояния, а также правила для взаимодействия с данной сущностью;
  •  объект – это отдельный представитель класса, имеющий конкретное состояние и поведение, полностью определяемое классом; описывается совокупностью свойств и методов, а также событий, на которые он может реагировать;
  •  интерфейс – набор методов класса, доступных для использования другими классами;
  •  инкапсуляция – свойство системы, позволяющее объединить данные и методы, работающие с ними, в классе и скрыть детали реализации от пользователя;
  •  абстрагирование – способ выделить набор значимых характеристик объекта, исключая из рассмотрения незначимые; абстракция – набор всех таких характеристик;
  •  полиморфизм (многообразие) – свойство системы использовать объекты с одинаковым интерфейсом без информации о типе и внутренней структуре объекта;
  •  наследование – свойство системы, позволяющее описать новый класс на основе уже существующего с частично или полностью заимствующейся функциональностью; класс, от которого производится наследование, называется базовым или родительским, а новый класс – потомком, наследником или производным классом.
  1.  В основу ООП положены следующие принципы:
  •  абстрагирование – процесс выделения существенных характеристик некоторого объекта, которые отличают его от всех других видов объектов;
  •  ограничение доступа – сокрытие отдельных элементов реализации абстракции, не затрагивающих существенных характеристик ее как целого;
  •  модульность – принцип разработки программной системы, предполагающий реализацию ее в виде отдельных частей (модулей);
  •  иерархия – ранжированная или упорядоченная система абстракций;
  •  типизация – ограничение, накладываемое на свойства объектов и препятствующее взаимозаменяемости абстракций различных типов;
  •  параллелизм – свойство нескольких абстракций одновременно находиться в активном состоянии, т.е. выполнять некоторые операции;
  •  устойчивость – свойство абстракции существовать во времени независимо от процесса, породившего данный программный объект, и/или в пространстве, перемещаясь из адресного пространства, в котором он был создан.
  1.  Интегрированная Среда Разработки (ИСР или Integrated Development Environment — IDE) — это система программных средств, используемых программистами для разработки программного обеспечения. Обычно среда разработки включает в себя текстовый редактор, компилятор и/или интерпретатор, средства автоматизации сборки, отладчик.

Контрольные вопросы

  1.  Дайте определение объектно-ориентированному программированию. Какими достоинствами и недостатками обладает данная технология?
    1.  Что собой представляют классы, объекты, интерфейсы?
    2.  В чем заключается сущность принципов инкапсуляции, полиморфизма, наследования?
    3.  Какие принципы положены в основу технологии ООП?
    4.  Определите основные этапы разработки программ с использованием технологии ООП.
    5.  Что собой представляет визуальное проектирование интерфейса?
    6.  Определите основные элементы пользовательского интерфейса ИСР Delphi.
    7.  Какие функции выполняет палитра компонентов в Delphi?
    8.  Для чего используется Инспектор объектов?
    9.  Определите назначение основных файлов, входящих в проект Delphi


Свойства

Обработчики событий

Методы

Установки при проектировании

События

События

Рис. 1.2. Схема организации объекта

1

2

3

4

5

6

7

8

9

  1.  

 

А также другие работы, которые могут Вас заинтересовать

84090. Республиканская форма правления признаки и виды 22.12 KB
  Установлена республиканская форма правления. Эта республиканская форма правления отличается от монархии которой присуще наследование статуса главы государства. Если рассматривать форму правления с чисто формальных позиций то можно сказать что она не оказывает определяющего влияния на характер государственного строя.
84091. Смешанные формы правления в современном мире 24.83 KB
  Так было во время и после буржуазных революций в Европе и Америке: молодая прогрессивная буржуазия возглавлявшая широкие слои населения добилась ограничения власти монарха ликвидации абсолютизма установления дуалистической или парламентарной монархии а иногда и республики например в США. В ходе этого исторического развития были и своеобразные зигзаги: республика при фашизме во главе с фюрером дуче каудильо мало чем по существу отличалась от монархии хотя юридически форма была иной а республики в социалистических странах странах...
84092. Форма правления: понятие и виды 16.75 KB
  Форма правления представляет собой структуру высших органов государственной власти порядок их образование и распределение компетенции между ними. Форма государственного правления дает возможность уяснить: как создаются высшие органы государства и какого их строение; как строятся взаимоотношения между высшими и другими государственными органами; как строятся взаимоотношения между верховной государственной властью и населением страны; в какой мере организация высших органов государства позволяет обеспечивать права и свободы...
84093. Унитарное государство признаки и виды 20.55 KB
  Унитарное государство характеризуется следующими признаками: унитарное устройство предполагает единые общие для всей страны высшие исполнительные представительные и судебные органы которые осуществляют верховное руководство соответствующими органами; на территории унитарного государства действует одна конституция единая система законодательства одно гражданство; составные части унитарного государства области департаменты округа провинции графства государственным суверенитетом не обладают; унитарное государство на территории...
84094. Федерация: понятие и признаки, виды 23.76 KB
  Существуют следующие формы государственного устройства: 1 Унитарное государство 2 Федеративное государство 3 Конфедеративное на данный момент не существует в природе 4 Региональное государство Федеративное государство представляет собой добровольное объединение ранее самостоятельных государственных образований в одно союзное государство государство состоящее из государств членов или государственных образований субъектов федерации. На данный момент в мире насчитывается 24ре федерации. Федерации бывают: а Договорные и...
84095. Форма государственного устройства: понятие и виды 21.73 KB
  Территория федерации состоит из территорий ее отдельных субъектов: штатов кантов земель республик и т. Субъекты федерации имеют право принятия собственной конституции имеют свои высшие исполнительные законодательные и судебные органы 4. В большинстве федерации существует союзное гражданство и гражданство федеральных единиц. При федеральном государственном устройстве в парламенте имеется палата представляющая интересы членов федерации.
84096. Демократический режим и его признакии 22.3 KB
  В демократическом государстве существует взаимная ответственность государства и личности.Предоставление широкой свободы личности предприятиям и организациям в сфере экономической деятельности которая при демократическом политическом режиме составляет основу материального благосостояния граждан.Реальная гарантированность прав и свобод личности и реальная возможность реализовать данные права и свободы.Наличие эффективной и квалифицированной судебной защиты прав и свобод личности от произвола и беззакония со стороны кого бы то ни было.
84097. Антидемократические государственно-правовые режимы 25.92 KB
  Основными чертами тоталитарного политического режима являются следующие: государство стремится к глобальному господству над всеми сферами общественной жизни к всеохватывающей власти; общество полностью отчуждено от политической власти но оно не осознает этого ибо в политическом сознании формируется представление о единстве слиянии власти и народа; господствует монопольный контроль над экономикой средствами массовой информации культурой религией и т. фактически устраняется плюрализм; происходит централизация государственной...
84098. Функции государства: понятие, признаки, содержание 20.68 KB
  Функции государства это основные направления внутренней и внешней деятельности государства в которых выражаются и конкретизируются его классовая и общечеловеческая сущность и социальное назначение. В этом определении выделены наиболее существенные признаки функций государства. Функции государства непосредственно выражают и предметно конкретизируют его классовую и общечеловеческую сущность.