Язык программирования Delphi. Обзор новых возможностей Delphi6:
Наконец-то появился долгожданный шестой Delphi. Я долго его ждал, потому что здесь добавлено очень много интересных возможностей, которые порадуют многих. Меня они превратили в гуймплена:). До сих пор улыбаюсь. На первый взгляд всё осталось тем же, но при более близком расмотрении, новинок больше чем, достаточно.
Начная с сегодняшнего дня все мои исходники будут опиратся только на Delphi 6. Это не значит, что исходник не будет работать в другой версии, просто они смогут откроються без проблем только в Delphi 6. В старых версиях придётся тебе писать всё придётся воссоздавать своими руками, потому что проект может не открыться. Я думаю, что с воссозданием моих примеров в других версиях проблем не будет. Потому что я описываю всё очень хорошо. Да и по вашим письмам я понял, что у некоторых ещё стоит четвёртая версия. Эти люди уже давно пишут мои примеры сами, потому что Delphi 4 открывает примеры Delphi 5 с проблемами.
А вообще, я уже давно говорю, что желательно самим писать то, что я говорю, а не использовать мои исходники. Я их даю только для общего развития. Если ты хочешь чему-то научится, то ты должен сам писать код, а не использовать чужой. Ты должен только прочитать статью, а пример нужно создавать своими руками.
Наверно я некоторых запутал. Возможно, кто-то испугался, что Delphi 5 и 6 абсолютно несовместимы. Спешу обрадовать таких пугливых: как и любая другая прога, Delphi совместима со старыма от старших версий к младшим. Это значит, что в Delphi 6 ты можешь открыть проект любой другой старой версии, но из старой версии не можешь открыть Delphi 6. Хотя с простыми проектами такое иногда удаётся (если проигнорировать несколько ошибок при открытии).
Исходный код также прекрасно переносится в Delphi 6. Да в принципе, с этим проблем никогда не было. Только с некоторыми компонентами сторонних разроботчиков бывают глюки. Из всего множества используемых мной компонентов, десяток пришлось немного подкорректировать, а для библиотеки RXLib пришлось скачать новую версию (правда неофициальную). Все остальные (около 50) компоненты установились как по маслу.
Итак, знакомтесь - Delphi 6.
Основное отличие - поддержка межплатформенности. Раньше Delphi был построен на библиотеке VCL (Visual Component Library), а теперь суда добавили ещё и библиотеку CLX (Component Library for Cross Platform). Если ты будешь писать свои проги с использованием CLX, то они смогут без проблем открываться в Kylix и компилироватся под Linux. Этим Borland обеспечило своё видение межплатформенности.
Некоторые пытаются сравнить переносимость Delphi на платформу Linux с Java. Такое сравнение грубая ошибка. Переносимость Java осуществляется на уровне байт кода за счёт использования виртуальной машины. Переносимость Delphi выполнена на уровне исходного кода. Это значит, что Java не требует перекомпиляции, а Delphi да. На мой взгляд это правильный подход, потому что лучше один раз перекомпилировать исходник и потом долго работать с быстрой прогой, чем один раз откомпилировать исходник и пользоватся тормознутой виртуальной машиной (ВМ). ВМ всегда отличается тормознутостью, потому что бинарник выполняется не ядром программы, а ВМ. Это значит, что все команды сначала передаются ВМ, а она их уже перекодирует в формат понятный для ОС. На это перекодирование уходит очень много времени и программа получается тормознутой. Переносимость Java эффективна только для Internet, где один и тот же код должен выполнятся на разных платформах.
Рис. 1 Создание нового проекта.
Некоторые скажут, что язык С тоже имеет задатки переносимости. Я с ними соглашусь, потому что С действительно имеет задатки, но ничего большего. Ты сможешь перенести только код математики типа if (i+2)==10 then i=4 . Графический интерфейс не подлежит переносу, работа с базами данных и с сетью тем более. Такая переносимость мне не нужна. Мне нужно, когда я открываю один и тот же проект и без проблем компилирую его. Такое возможно только в Delphi. Ну конечно, если ты будешь использовать какие-то вещи специфичные для определённой ОСи, то это нельзя перенести. Но до 80-90% кода переносится без проблем.
Теперь у меня есть не только быстрая, мощная и удобная система разработки, но и в полном смысле межплатформенная. Теперь один человек может не просто создавать с помощью Delphi конкурентные приложения и боротся с крупными фирмами, но и побеждать на двух рынках сразу - Windows и Linux. Когда у тебя есть версии для двух платформ, это громадный дополнительный плюс, который поможет тебе при продвижении софта на рынок.
Теперь посмотрим на межплатформенность реально. В принципе VCL была спроектированна идеально и особых изменений не претерпела. На рисунке 2 я показал иерархию объектов в Delphi при VCL. Как видишь, все визуальные компоненты, которые ты ставишь на форму происходят от TWinControl (эта ветвь выделена жирным цветом). Вот в этой вестви и произошло большое изменение. Теперь TWinControl превратился в TWidgetControl. В остальном CLX - это тот же VCL.
Рис. 2 Иерархия объектов в Delphi при VCL.
Многие ругали Borland за плохой код VCL (лично я ничего плохова в нём не видел и сейчас не вижу). Интересно, что теперь скажут любители Visual C++ и MFC, когда VCL без труда портировалась на Linux, а MFC испытывает здесь большие затруднения. Конечно же и с MFC были попытки портации, но они были жалкими и все потерпели неудачу. В случае с VCL и CLX я не вижу только счастливое будущее, потому что "мощная визуальная среда" + "межплатформенность" = "мощь в квадрате", а может даже и в десятой степени :).
Теперь ещё одно отличие проектов. Я уже показал окно создания проекта (рис 1). На нём ты можешь видеть новый пункт CLX Application. Попробуй создать этот проект. Теперь взглянём на исходник. Он тот же самый. Но это только на первый взгляд. Тут есть одно отличие в разделе uses:
Как видишь, первые три модуля стандартны "SysUtils, Types, Classes". У остальных появилась приставка "Q". В остальном, имена те же, объекты те же и работа с ними тоже не изменилась. Так что переход между платформами заклучается только в изменении имён модулей и уничтожении специфичных для ОСи функций (например, парямые вызовы WinAPI).
Конечно, ты можешь сказать, что без WinAPI не обойтись и иногда он просто необходим. Но при работе с базами данных он не нужен. Это значит, что все эти проги со свистом перенесутся на Linux, для работы с сетью он тоже не обязателен, потому что в Delphi входит мощная библиотека INDY, которая может практически всё необходимое. Да и в любом случае, самое нудное в программировании - это написание графического интерфейса. Теперь это занятие стало не только простым, но и межплатформенным.
Компонентная часть Delphi 6.
В Delphi 6 помимо межплатформенности появилось и несколько интересных компонентов. Так, например, это уже упоминавшийся мной мощьный пакет сетевых компонентов INDY. Теперь у нас есть кучка удачных компонентов для работы с сетью, которые могут выполнить практически любые задачи.
Не менее удачной и более заслуживающей внимания является библиотека dbExpress. Раньше встроенные средства работы с базами данных (БД) были реализованы с помощью BDE. Те кто работал с ней знают о её глючности и неудобности. Это была единственная чёрная дыра в Delphi. Теперь эту дыру прикрыли и вместо неё есть наор отличных компонентов по имени dbExpress. Как заявили представители Borland - это новый шаг в БД (класно звучит - "шаг в БеДе" :)). Хотя один из представителей Borland мне признался, что библиотека построена на подобии ADO, но более продвинутая и лишённая её недостатков. Если это так, то меня это устраиввает. А как на самом деле узнаем со временем, когда поработаем с ней достаточно долго. Пока что библиотека меня устроила.
Рис. 3
Помимо этого добавилось несколько компонентов стандартых вещей типа TComboBoxEx (которыйпозволяет хранить не только текст, но и картинки), TLabelEdit (интеграция TEdit с надписью), несколько компонент для создания изменяемых в runtime панелей управления и несколько других вещей. Единственное, что меня из этого заинтересовало - компоненты для создания панелей, но честно сказать, они не очень удобны и мне кажется ещё не доработаны. Возможно в следующей версии они улучшатся и заслужат моего внимания :).
Ну что ещё сказать, очень много добавлено компонентов для работы с Internet. Их так много, что с ними нужен отдельный разговор, поэтому я не буду здесь этого касатся, потому что разговор растянется, а большие статьи читать слишком тяжело.
Очень хорошо изменился визуальный дезайнер. На рисунке 3 показан Object Inspector из Delphi 6. В инспекторе показаны свойства компонента TComboBoxEx. Обрати внимание на выделенные зелёным цветом свойства. Они не имеют никакого отношения к TComboBoxEx. Это TImageList, который подключён к TComboBoxEx. Что это даёт? Например, у тебя есть ToolBar с кнопками. Ты хочешь добавить к нему новую кнопку. Чтобы не искать, какой ImageList подключён к ToolBаr ты просто выбираешь панель и изменяешь её свойство прямо здесь, не думая, о том, какой же всё таки ImageList подключён. А главное, ты так не ошибёшся. Просто гениальная возможность, о которой я мечтал.
Рис. 4
Помимо этого, появилось окно Object TreeView, в котором показаны в виде дерева все установленные на форме компоненты. С помощью него очень удобно отыскивать нужный и изменять его свойства, особенно, если у тебя на форме громадное количество всякой дряни. Просто найди нужный компонент, выдели его и изменяй свойства в объектном инспекторе.
Вот и всё. Мой краткий обзор новых возможностей Delphi закончен. Удачи тебе.
В следующий раз мы увидем Delphi 6 уже в действии и посмотрим на новинки своими глазами. Жди, в ближайшее время что-то подобное появится на моих страницах.