Лекции Практические и лабораторные занятия Курсовая работа (проект) Самостоятельная работа студента




Скачать 1.86 Mb.
страница 7/7
Дата 11.10.2016
Размер 1.86 Mb.
1   2   3   4   5   6   7
Тема: Параметризованные классы.

Цель: знать предназначение параметризованного класса

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

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

Рис. 1. Графическое изображение шаблона на диаграмме классов

Шаблон не может быть непосредственно использован в качестве класса, поскольку содержит неопределенные параметры. Чаще всего в качестве шаблона выступает некоторый суперкласс, параметры которого уточняются в его классах-потомках. Очевидно, в этом случае между ними существует отношение зависимости с ключевым словом "bind", когда класс-клиент может использовать некоторый шаблон для своей последующей параметризации. В более частном случае между шаблоном и формируемым от него классом имеет место отношение обобщения с наследованием свойств шаблона (рис. 2). В данном примере отмечен тот факт, что класс "Адрес" может быть получен из шаблона Связный_список на основе актуализации формальных параметров "S, k, l" фактическими атрибутами "улица, дом, квартира".

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



Рис.2. Пример использования шаблона на диаграмме классов



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

  1. Для чего пердназначен параметризированный класс?

  2. Что чаще всего выступает в качестве шаблона?

  3. Что позволяет использование концепция шаблонов в языке UML?

СРСП № 6

Тема: Реализация ООП в языке программирования

Цель: знать основные понятия

Язык Pascal был создан задолго до того, как выяснилось, что ООП становится de facto стандарной концепцией разработки программного обеспечения. Соответственно, появившиеся реализации ООП подхода на Pascal'е несут в себе отпечаток дообъектного прошлого этого языка.

Лидер разработок компиляторов паскаля в Borland Андрес Хейлсберг (Andres Heilsberg) решил ввести элементы ООП лишь в версию (5.5), а следующие версии сделать полностью ООП-ориентированными. К сожалению, полностью это так и не удалось.

Синтаксис

 Для того, чтобы объявить класс на Pascal'е необходимо воспользоваться ключевым словом Object. Так как класс всегда является типом, делать это можно лишь в Type части программы:



Type
Class1 = Object




{список полей}
A: Byte;
V: Real;
{список методов}
Procedure Nothing(Var K: Byte);
End;


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

Var Object1, Object2: Class1;




Соотвенно, доступ к полям объекта некоторого класса производится аналогично доступу к полям записи:

Object1.V:= Object2.A;

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

Object1.Nothing(Object1.A);



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

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



Type Class2 = Object(Class1)




M: Integer;
End;




Var Object3: Class2;




При таком объявлении объект Object3 обладает тремя полями - A, V, M - и одним методом - Nothing(Var Byte).

Методы 

Методы объектов обладают единственным отличием от обычных процедур/функций: они, собственно, принадлежат объектам. Следовательно, они обладают доступом к полям именно "своему" объекту. Так как объектов в программе может быть множество, то, во избежание дублирования кода, каждый метод получает в качестве неявного параметра указатель на объект, для которого он вызван. Данный указатель доступен в теле метода как @Self. Естественно, что объявленный (декларированный) при определении класса метод должен быть определен (дефинирован) в программе. Известно, что все методы класса делятся на обычные (статические) и виртуальные. Любой метод считается статическим, если не указано обратное. Указать же, что метод является виртуальным можно, указав после его декларации в дефиниции класса ключевое слово Virtual:



Type
Class3 = Object




Procedure Nothing(Var K: Byte); Virtual;
End;




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

Конструкторы и деструкторы

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





кконструкторы;




ддеструкторы.

Конструкторы предназначены для инициализации полей объектов в момент их создания. Объявляются они следующим образом:

Type Class4 = Object




B: Byte;
Constructor Init(CB: Byte);
Destructor Done; Virtual;
End;




Constructor Class3.Init(CB: Byte);
Begin B:= VB;




End;
Destructor Class3.Done;
Begin
End;

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

Несмотря на то, что как конструктор, так и деструктор могут быть вызваны непосредственно, их специфическое назначение привело к появлению возможности вызова их параллельно с созданием/удалением объектов. Так как создание/удаление объектов в процессе выполнения программы на Pascal'е возможны только при использовании ДРП, то функции создания/удаления типизированных переменных имеют дополнительный синтаксис

{ . . . }


Type PClass4 = ^Class4;




Var P: PClass4;




{ . . . }
Begin P:= New(PClass4, Init(4));
{ . . . }
Dispose(P, Done);




End;

Именно здесь мы впервые встретились с возможностью с помощью одной и той же переменной получить доступ к объектам различных классов. Действительно, в зависимости от хода алгоритма указателю P может быть присвоено значение адреса как объекта класса Class4, так и адреса объекта класса-наследника от Class4.

Перекрытие методов

Перекрыть метод предка в классе наследнике очень просто: продекларировать метод с тем же именем.

Type Class5 = Object(Class1)





Procedure Nothing;
End;




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

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

  1. Наследование

  2. Для чего предназначены конструкторы?

  3. Назначение деструкторов

СРСП № 7

Тема: Создание проектов с использованием символов и строк

Цель: знать основные функции для работы с символами и строками

Сегодня мы с вами разберемся, как в Delphi можно работать со строками, мы рассмотрим ряд функций и процедур которые пришли к нам еще из самого Pascal. Некоторые из них есть только в Object Pascal . Ну что же приступим, для начала разберемся, как можно переводить строку в число и обратно. Для этого используются функции IntToStr – для перевода числа в строку и StrToInt – для перевода строки в число. Вот пример:

var
a,b:Integer;
str:string;
begin
a:=5;
b:=1;
str:=IntToStr(a+b);
ShowMessage(str);
end;

Ну а противоположную функцию можно смело использовать например если вы хотите преобразовать строку лежащую, например в компоненте TEdit . Вот пример:

var
a:Integer;
begin
a:=StrToInt(Edit1.Text)+StrToInt(Edit2.Text);
Edit3.Text:=IntToStr(a);
end;

Следующая функция, которую мы рассмотрим, определяет длину строки. Это функция Length (str), где str это строка, которую мы должны измерить.

var
a:Integer;
str:string;
begin
str:='Hello World!';
a:=Length(str);
end;

В переменной а будет хранится число 12, именно столько символов, включая пробел содержит строка ‘ Hello World !'.

Следующая процедура Delete ( str , index , count ) – она удаляет количество count символов начиная с index в строке str . Ловите пример

var
str:string;


begin
str:='Hello World!';
Delete(str,6,7);
ShowMessage(str);
end;

На экран будет выведено слово Hello . Следующая функция Insert ( substr , str , index ) – эта функция вставляет подстроку substr в строку str , начиная с index . Например, давайте представим строку ‘ my girlfriend ' и давайте преобразуем ее в строку ‘ my best girlfriend '.

var
str,substr:string;
begin
str:='my girlfriend';
substr:='best ';
Insert(substr,str,4);
ShowMessage(str);
end;

Следующая функция с которой мы познакомимся соединяет строки. Это Concat ( s 1, s 2,…). Вот практический пример:

var
str1,str2,str3:string;
begin
str1:='MU';
str2:=' versus';
str3:=' Arsenal';
str1:=Concat(str1,str2,str3);
ShowMessage(str1);
end;

В итоге в str 1 мы получили строку ‘ MU versus Arsenal '.

Теперь давайте научимся копировать из строки определенное количество символов. Для этого используется функция Copy . Итак, Copy ( str , index , count ) – нужно копировать количество символов count начиная с index из строки str . Пример :

var
str1,str2:string;


begin
str1:=' один два три ';
str2:=Copy(str1,6,3);
ShowMessage(str2);
end;

В итоге на экране появится строка два.

Теперь познакомимся с функцией Pos (str1, str2) которая возвращает число, например:

var
str1,str2:string;


i:Integer;
begin
str1:='Hello world';
str2:='world';
i:=Pos(str2,str1);
end;

После выполнения данного кода в переменной I будет хранится число 7. Именно с него начинается слово world в строке str1.

PosEx по сути функция очень похожая на предыдущую. PosEx (substr, str, x) – тут все по сути почти также как и в предыдущей, только поиск начинается с x символов.

Чтобы перевести вещественное число в строку надо использовать функцию FloatToStr , а если надо наоборот то StrToFloat . Но у этих двух функции есть аналоги – val b str . Сейчас на примерах мы рассмотрим как с ними работать.

Var
S: string;
X: Extended;
code: integer;
Begin
S:= ' 7 . 8 ';
Val(S, X, code);
End ;

Результатом этого кода будет то, что в переменной x будет хранится число 7,8. Для чего нам нужен code ? Он выдает ноль если все в порядке или номер символа котолрый не является числом если произошла ошибка. Теперь обратный пример :

Var
S: string;
X: integer;
Begin
X:= 10 ;
Str(X, S);
End;

После этого кода в переменной S будет хранится строковое значение ‘10'.



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

  1. Опишите предназначение каждой функций

СРСП № 8

Тема: Событийно-управляемое программирование

Цель: знать происхождение СУП
В 1991 году корпорация Microsoft представила компьютерному миру VISUAL BASIC. Правильно надо говорить не просто язык программирования, а среда программирования VISUAL BASIC.

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

Система программирования VISUAL BASIC позволяет, "отстранившись" от сложнейшей внутренней структуры Windows создавать в ней программы различной сложности.

VISUAL BASIC - один из первых языков, поддерживающий событийно управляемое программирование (event-driven programming). Программирование традиционно ориентировалось на поэтапное описание конкретного процесса, поэтому программный код во многом напоминал кулинарный рецепт. (Пример) Повар все делает сам, и нельзя забыть о какой-нибудь мелочи. С этим в кулинарии можно и смириться, хотя согласитесь, залить кипятком лапшу "Доширак" (приготовленную кем-то) если не вкуснее, так уж точно удобнее, а в некоторых случаях просто незаменимо. Но это в кулинарии, а уж при разработке современных компьютерных приложений всех "мелочей" не предусмотришь.

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

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


  1. Что такое система программирования?

  2. Расскажите про язык программирования VISUAL BASIC?

СРСП № 9

Тема: Управление техническими средствами через API.

Цель: знать как можно с помощью вызовов Windows API управлять объектами из VCL.

Разработчики библиотеки визуальных компонент (VCL) Delphi очень серьезно поработали над ее проектированием и воплощением в реальность. Как показывает практика, стандартного набора объектов обычно достаточно для создания реальных приложений. И, что более существенно, им (разработчикам) удалось решить очень сложную задачу, стоящую перед создателями любой среды визуального программирования - скрыть от программиста сложность и трудоемкость программирования в Windows и, в то же время, не лишать его возможности доступа к тем богатым возможностям системы, которые предоставляет Windows API.

Ниже рассмотрено несколько примеров, как с помощью вызовов Windows API можно управлять объектами из VCL.

Стандартная страница Палитры Компонент

Компоненты, расположенные на странице “Standard”, представляют из себя объектную оболочку для стандартных управляющих элементов Windows. Поэтому для них существуют ограничения, накладываемые самой системой. Например, 32Кб - максимальный размер текста в TMemo.

Для добавления в меню картинки можно использовать функцию API Windows SetMenuItemBitmaps(), например, следующим образом:

 …

implementation



var


BMP1, BMP2 : TBitMap;

 procedure TForm1.FormCreate(Sender: TObject);



begin

BMP1:=TBitMap.Create;

BMP1.LoadFromFile('c:\images\uncheck.bmp');

BMP2:=TBitMap.Create;

BMP2.LoadFromFile('c:\images\check.bmp');

SetMenuItemBitmaps(File1.Handle, 1, MF_BYPOSITION, BMP1.Handle, BMP2.Handle);

end;

 procedure TForm1.FormDestroy(Sender: TObject);



begin

BMP1.Free;

BMP2.Free;

end;


 File1 это объект класса TMenuItem - пункт меню “File”. Значения параметров при вызове функции можно посмотреть в справочнике по Windows API.

При уничтожении меню освобождения связанных с ним картинок не происходит и их надо уничтожать вручную.

Вторая картинка BMP2 отображается рядом с пунктом меню, когда он выбран (Checked=True).

  TMemo

Компонент класса TMemo может содержать до 32К текста (для Windows 3.x) вследствие ограничения Windows.

Определение позиции каретки в TMemo.

 Можно использовать сообщения Windows API EM_LINEFROMCHAR и EM_LINEINDEX для определения текущей позиции каретки.

 procedure TForm1.ShowPosition;

var

LineNum: longint;



CharNum: longint;

begin


LineNum:= Memo1.Perform(EM_LINEFROMCHAR, Memo1.SelStart,0);

CharNum:= Memo1.Perform(EM_LINEINDEX, LineNum, 0);

Label1.Caption := 'Line : '+ IntToStr(LineNum+1);

Label2.Caption := 'Position :' + IntToStr((Memo1.SelStart -

CharNum)+1);

end;


 Метод Perform, определенный в классе TControl, посылает сообщение своему же объекту, то есть его использование имеет тот же эффект, что и вызов функции API SendMessage():

 SendMessage(Memo1.Handle,EM_LINEFROMCHAR, Memo1.SelStart,0);

Операция UnDo в TMemo.

Отмена последнего редактирования (операция UnDo) в объекте класса TMemo выполняется так же с помощью сообщений, посылаемых в данный объект:

 procedure TForm1.UnDoClick(Sender: TObject);

begin


if Memo1.Perform(EM_CANUNDO, 0, 0)0 then

Memo1.Perform(EM_UNDO, 0, 0);

end;

В справочнике по Windows API описаны сообщения, которые можно послать в объект TMemo для управления его поведением. Кроме вышеназванных, имеется еще несколько полезных:



 EM_EMPTYUNDOBUFFER Сбрасывает флажок UnDo

EM_GETHANDLE Получает указатель на буфер с текстом

EM_LINESCROLL Прокрутка текста в окне TMemo

EM_SETHANDLE Установка указателя на буфер с текстом

EM_SETTABSTOPS Устанавливает табуляцию в окне с текстом

TListBox, TComboBox

Windows накладывает ограничение на количество элементов в списке этих управляющих элементов. В случае Windows 3.x это количество равно 5440, в Windows’95 - 32767.

Как получить горизонтальную прокрутку (scrollbar) в ListBox?

 

Так же как в случае с TMemo, здесь можно использовать сообщения. Например, сообщение может быть отослано в момент создания формы:



 

procedure TForm1.FormCreate(Sender: TObject);

begin

ListBox1.Perform(LB_SETHORIZONTALEXTENT, 1000, Longint(0));



end;

Второй параметр в вызове - ширина прокрутки в точках.

 Вставка графики в ListBox.

 У класса TListBoxTComboBox тоже) есть свойство Style, определяющее порядок рисования объекта. По-умолчанию оно установлено в lbStandard и за внешний вид объекта отвечает Windows. Если установить это значение в lbOwnerDrawFixed или lbOwnerDrawVariable, то можно несколько разнообразить внешний вид объекта. Давайте построим для примера ListBox, отображающий названия файлов формата .BMP из какой-либо директории вместе с их картинками.

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

 

procedure TForm1.Button1Click(Sender: TObject);



var

s : String;

begin

s:='c:\windows\*.bmp'#0;



ListBox1.Perform(LB_DIR, DDL_READWRITE, Longint(@s[1]));

end;


 Далее, как уже было сказано, свойство Style нужно установить в lbOwnerDrawFixed и создать обработчик события OnDrawItem:

 procedure TForm1.ListBox1DrawItem(Control: TWinControl;

Index: Integer; Rect: TRect; State: TOwnerDrawState);

var


Bitmap: TBitmap;

Offset: Integer;

BMPRect : TRect;

begin


with (Control as TListBox).Canvas do

begin


{очищаем прямоугольник}

FillRect(Rect);



{считываем картинку}

Bitmap:=TBitMap.Create;

Bitmap.LoadFromFile ('c:\windows\'+ListBox1.Items[Index]);

if Bitmap nil then begin



{вычисляем квадрат для показа картинки}

BMPRect:=Bounds(Rect.Left + 2, Rect.Top + 2,

Rect.Bottom-Rect.Top-2, Rect.Bottom-Rect.Top-2);

{рисуем картинку}

StretchDraw(BMPRect, BitMap);

Offset := Rect.Bottom-Rect.Top + 6;

end;


{выводим текст}

TextOut(Rect.Left+Offset,Rect.Top, Listbox1.Items[Index]);



{не забыть освободить!}

Bitmap.Free;

end;

end;


Чтобы картинки получились побольше, значение свойства ItemHeight можно увеличить.

 Есть около двух десятков сообщений, которые можно послать в объекты класса TListBox и TComboBox.



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

  1. Какие еще примеры можете привести

СРСП № 10

Тема: Создание проектов с использованием табличных данных

Цель: развитие навыков в создании проектов

Компонент StringGrid находится на странице Additional палитры компонентов. Там находятся "дополнительные" компоненты.

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

Таблица StringGrid состоит из выделенных серым FixedCols и FixedRows - зафиксированных ячеек-заголовков, и обычных, белых ячеек. Содержимое Fixed ячеек недоступно редактированию, и меняется только программно. За возможность редактирования обычных ячеек отвечает одно из значений свойства Options.

Итак, компонент StringGrid имеет возможность адресации каждой отдельной ячейки по номеру столбца и строки. Содержимое ячейки (i, j), где где i - номер столбца, j - номер строки, имеет вид

StringGrid1.Cells[i, j] и доступно как для чтения, так и для записи. Здесь, как и всегда, номера столбцов ( i ) и строк ( j ) отсчитываются от 0.

Выделенная ячейка таблицы имеет


номер столбца:

   StringGrid1.Col

номер строки:

   StringGrid1.Row

поэтому содержимое выделенной ячейки будет адресоваться так:

S:=StringGrid1.Cells[StringGrid1.Col, StringGrid1.Row];

Написание такой строки - утомительный процесс. Поэтому пользуйтесь оператором присоединения with:

 with StringGrid1 do

S:=Cells[Col, Row];

А лучше сразу задать в свойстве Name имя покороче, например SG.

За многие свойства компонента Delphi StringGrid отвечает свойство Options. В Инспекторе Объектов Options - это раскрывающийся список, представляющий собой элементы данного множества. Если значение элемента равно True, то он присутствует в множестве, если False - то нет.

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


  1. Предназначение StringGrid?

  2. Из чего состоит таблица StringGrid?

  3. Назначение свойства Options?

СРСП № 11

Тема: Структура приложения Windows.

Цель: знать структуру приложения

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

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

Как уже отмечалось выше, приложение Windows содержит, по крайней мере, два принципиально важных модуля:

·         Функция WinMain();

·         Функция WndProc().

Функция WinMain



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

·         регистрация класса окна приложения и другие инициализации;

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

·         запуск цикла обработки сообщений, помещаемых в очередь приложения;

·         завершение работы приложения при извлечении из очереди сообщения WM_QUIT.

Шаблон функции WinMain выглядит так:

int PASCAL WinMain(hInstance, hPrevInstance, lpCmdLine, nCmdShow)

HANDLE hInstance; // дескриптор текущей копии

HANDLE hPrevInstance; // предыдущая копия

LPSTR lpCmdLine; // указатель на командную строку

int nCmdShow; // флаг “окно_открыто/окно_закрыто

{ }

Функция WinMain имеет четыре параметра. Первый параметр – hInstance – является дескриптором копии приложения. Это число однозначно определяет каждую копию приложения, исполняемую под Windows. Можно одновременно выполнять несколько копий одного приложения, при этом каждой копии будет соответствовать уникальный индекс.

Второй параметр – hPrevInstance – является дескриптором, определяющим копию данного приложения, которая была последней активной копией. Если параметр hPrevInstance равен нулю, других копий этого приложения не существует.

Третий параметр – lpCmdLine – это дальний указатель на командную строку, оканчивающуюся нулем. Он позволяет приложению получать данные через командную строку.

Четвертый параметр – nCmdShow – определяет, как приложение первоначально отображается на дисплее: пиктограммой (nCmdShow = SW_SHOWMINNOACTIVE) или в виде открытого окна (nCmdShow = SW_SHOWNORMAL).

Работа с копиями приложения



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

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

Для того, чтобы отличить одну копию данных от другой той же программы, каждой копии программы Windows ставит в соответствие уникальный дескриптор копии приложения (instance handle). Соответствующую целочисленную переменную hInstance Windows передает функции WinMain при вызове в качестве одного из обязательных параметров. Другим обязательным параметром является также целочисленный параметр hPrevInstance, который позволяет копии программы в процессе работы определить, первая она или нет. При запуске первой копии Windows присваивает hPrevInstance значение нуль.

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

Если по логике программы запуск двух ее копий нежелателен или не допустим , то можно запретить запуск второй копии, поместив в функцию WinMain проверку:

 if (hPrevInstance) return NULL;

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

1. Какой файл необходим при написании любых программ для Windows?

2. Какие два важных модуля содержит приложение Windows?

3. Какие действия выполняет WinMain?

СРСП № 12

Тема: Основные понятия и принципы визуальной системы программирования

Цель: знать основные понятия и принципы

Delphi – это система объектно-ориентированного визуального программирования.

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

Delphi использует язык Object Pascal в среде визуальной разработки.

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

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

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

 Объектно-ориентированное программирование (ООП, OOP – Object Oriented Programming) позволяет решать сложные задачи с помощью объектов, необходимых для программирования в Windows. При работе с Delphi можно и не использовать концепции ООП, но использование элементов визуальной разработки автоматически ведёт к применению ООП.

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

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

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

 

Схематично взаимосвязь программ с Delphi и Windows представлена на рис.1.



 

 

Рисунок 1



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

 Практически все объекты реагируют на определённые события от мыши и клавиатуры.

Приложения Windows используют методы (подпрограммы) обработки событий для управления взаимодействием между программой и пользователем и для реакции на действия ОС. Программный код, который пишет программист в Delphi, будет обеспечивать реакцию на события. Подпрограмма, которая реагирует на событие, называется обработчиком события. Delphi работает с событиями путём вызова определённых процедур – обработчиков событий. Если процедура не связана с данным событием, то оно игнорируется и выполняется стандартная реакция системы или не производится никакого действия.

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



  1. Что лежит в основе Delphi?

  2. Какой язык использует Delphi?

  3. Что представляет собой объектно-ориентированная программа

  4. Что такое событие?

  5. В чем состоит суть программирования, управляемого событиями?

СРСП № 13

Тема: Создание собственных компонентов.

Цель: знать и уметь создавать собственные компоненты

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

Решение о создании новых компонентов может быть принято по ряду причин, среди которых:

- разработка нового пользовательского интерфейса с дальнейшим использованием его в других приложениях;

- создание принципиально нового класса, которого нет в стандартной библиотеке Kylix;

- упрощение кода приложения путем введения новых компонентов;

- распространение своих компонентов среди других программистов;

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

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

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

- определите для себя, какие действия должен выполнять компонент;

- разработайте краткий алгоритм, по которому будет работать компонент;

- разбейте всю конструкцию компонента на независимые части;

- предоставьте возможность дальнейшей разработки компонента (возможно, в будущем вы захотите создать на его основе компонент-потомок);

- напишите код компонента (этот пункт разбивается на такие этапы):


  • выбор предка для вашего компонента;

  • создание заготовки (модуля) компонента;

  • создание свойств, событий и методов компонента;

  • отладка и тестирование;

  • регистрация компонента в среде;

  • создание справки для вашего компонента.

Далее мы рассмотрим перечисленные выше этапы создания компонента.

Выбор предка компонента

Создание заготовки компонента

Итак, вы выбрали класс-предок для вашего компонента. Теперь можно приступать к созданию модуля вашего компонента. Создание модуля (заготовки) для нового компонента можно выполнить путем вызова окна Delphi, которое называется экспертом компонентов (Component Expert). Данное окно можно вызвать путем выбора в главном меню Delphi пункта Соmponent/New Component. Рассмотрим данное окно. Итак, первое поле ввода Ancestor type предназначено для ввода класса - предка для нового компонента. Данное поле ввода держит в выпадающем списке все зарегистрированные классы библиотеки СLX. Предположим, что мы будем создавать компонент, предком которого яется кнопка TButton. Для этого выберем в выпадающем списке класс Button. Следующее поле Class Name предназначено для ввода имени нового класса. Пусть в нашем случае это будет новый класс TButton. Заметьте, что по умолчанию Delphi заполняет это поле именем класса-предка с добавлением порядкового номера (в нашем случае TButtoni).



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

  1. Для чего же нужны новые компоненты? Зачем их создавать?

  2. Перечислите классы CLX

  3. Опишите возможности класса TCustomClassName

  4. От чего зависит создание компонента?

СРСП № 14

Тема: Создание встроенной справочной системы

Цель: знать процесс создания справочной системы

После того как создан файл справочной информации системы (RTF-файл), можно приступить к созданию справочной системы (HLP-файла). Для этого удобно воспользоваться программой Microsoft Help Workshop, которая поставляется вместе с Delphi и находится в файле Hcw.exe.

Запустить Microsoft Help Workshop можно из Windows или из Delphi, выбрав из меню Tools команду Help Workshop.

Если в меню Tools команды Help Workshop нет, то надо из этого же меню выбрать команду Configure Tools и в открывшемся диалоговом окне Tool Options (рис. 14.4) щелкнуть на кнопке Add. В результате этого откроется диалоговое окно Tool Properties (рис. 14.5), в поле Title которого надо ввести название программы — Help workshop, а в поле Program — полное (т. е. с указанием пути) имя исполняемого файла программы Microsoft Help

Workshop— C:\Program Files\Borland\Delphi7\Help\Tools\HCW.exe. Для ввода имени файла можно воспользоваться кнопкой Browse.

Рис. 14.4. Диалоговое окно Tool Options



Рис. 14.5. Диалоговое окно Tool Properties

После запуска программы Microsoft Help Workshop на экране появляется главное окно программы.

Для того чтобы приступить к созданию справочной системы, нужно из меню File выбрать команду New, затем в открывшемся диалоговом окне тип создаваемого файла — Help Project. В результате этих действий открывается окно Project File Name. В этом окне сначала надо выбрать папку, где находится программа, для которой создается справочная система, и где уже должен находиться файл документа справочной системы (RTF-файл). Затем в поле Имя файла нужно ввести имя файла проекта справочной системы. После щелчка на кнопке Сохранить открывается окно проекта справочной системы .

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

СРСП № 15

Тема: Создание проектов с использованием графических возможностей программы Delphi

Цель: развитие навыков в создании проектов

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

Программа выводит графику на поверхность объекта (формы или компонента Image). Поверхности объекта соответствует свойство canvas. Для того чтобы вывести на поверхность объекта графический элемент (прямую линию, окружность, прямоугольник и т. д.), необходимо применить к свойству canvas этого объекта соответствующий метод. Например, инструкция Form1.Canvas.Rectangle (10,10,100,100) вычерчивает в окне программы прямоугольник.

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

Методы вывода графических примитивов рассматривают свойство Canvas как некоторый абстрактный холст, на котором они могут рисовать (canvas переводится как "поверхность", "холст для рисования"). Холст состоит из отдельных точек — пикселов. Положение пиксела характеризуется его горизонтальной (X) и вертикальной (Y) координатами. Левый верхний пиксел имеет координаты (0, 0). Координаты возрастают сверху вниз и слева направо (рис.). Значения координат правой нижней точки холста зависят от размера холста.



Рис. Координаты точек холста

Размер холста можно получить, обратившись к свойствам Height и width области иллюстрации (image) или к свойствам формы: ClientHeight и Clientwidth.



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

  1. Методы какого типа обеспечивают вывод графических примитивов

  2. Какие свойства позволяют задать характеристики выводимых графических примитивов

СРС № 1

Тема: Классификация языков программирования, поддерживающих объектную парадигму

Цель: знать основные понятия и определения

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



  • объект — элементарная сущность, описываемая определенными свойствами (хранящимися в виде атрибутов объекта) и поведением (реализованным в виде методов);

  • класс описывает структуру свойств и поведения одного типа объектов. Каждый объект программы является экземпляром некоторого класса;

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

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

Многие современные языки поддерживают ООП, хотя и в разной степени:

  • чисто объектно-ориентированные языки, например, Smalltalk и Ruby, разработаны для того, чтобы поддерживать и даже навязывать объектно-ориентированный стиль разработки, и не поддерживают другие стили программирования;

  • преимущественно объектно-ориентированные языки, например, Java, C++ и Python, разработаны в основном для поддержки ООП, но позволяют использовать элементы процедурного программирования;

  • исторически процедурные языки, например, Perl и Fortran 2002, были доработаны и в них была добавлена поддержка некоторых элементов ООП;

  • экзотические языки, например, Modula-2 и Oberon, реализуют некоторые черты и принципы ООП, но в оригинальной форме.

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

Языки программирования, поддерживающие данную парадигму программирования:



  • ABAP

    • ABAP/4

      • SAP R/3

    • Ada



    • A#

    • Ada/Ed

    • Green Hills

    • Hewlett-Packard Ada

    • IBM Rational Ada Developer

    • Sun SC Ada

    • gnat

      • gnat 3.4.5

    • Boo

      • boo 0.7.6.2237

      • boo 0.8.2

  • C#

    • .NET C#

      • .NET 1.0

      • .NET 2.0

    • DotGNU C#

      • DotGNU Portable.NET 0.8.0

    • Microsoft Cω compiler

      • Microsoft Cω compiler 1.0.2

    • Mono C#

      • Mono 1.2.4

      • gmcs 2.0.1

  • C++

    • Acorn C/C++

    • Borland C++ Builder

      • Borland C++ Builder 6

    • Digital Mars C/C++

      • Digital Mars C/C++ 8.0

      • Digital Mars C/C++ 8.10

      • Digital Mars C/C++ 8.12

      • Digital Mars C/C++ 8.13

      • Digital Mars C/C++ 8.15

      • Digital Mars C/C++ 8.17

      • Digital Mars C/C++ 8.18

      • Digital Mars C/C++ 8.18A

      • Digital Mars C/C++ 8.18C

      • Digital Mars C/C++ 8.18D

      • Digital Mars C/C++ 8.18E

      • Digital Mars C/C++ 8.20

      • Digital Mars C/C++ 8.22

      • Digital Mars C/C++ 8.23

      • Digital Mars C/C++ 8.25

      • Digital Mars C/C++ 8.26

      • Digital Mars C/C++ 8.27

      • Digital Mars C/C++ 8.28

      • Digital Mars C/C++ 8.29

      • Digital Mars C/C++ 8.30

      • Digital Mars C/C++ 8.31

      • Digital Mars C/C++ 8.32

      • Digital Mars C/C++ 8.33

      • Digital Mars C/C++ 8.34

      • Digital Mars C/C++ 8.35

      • Digital Mars C/C++ 8.36

      • Digital Mars C/C++ 8.37

      • Digital Mars C/C++ 8.38

      • Digital Mars C/C++ 8.39

      • Digital Mars C/C++ 8.40

      • Digital Mars C/C++ 8.41

      • Digital Mars C/C++ 8.42

      • Digital Mars C/C++ 8.43

      • Digital Mars C/C++ 8.44

      • Digital Mars C/C++ 8.45

      • Digital Mars C/C++ 8.46

      • Digital Mars C/C++ 8.47

      • Digital Mars C/C++ 8.48

      • Digital Mars C/C++ 8.49

      • Digital Mars C/C++ 8.50

    • Intel C/C++

    • MIPSpro C/C++

    • Microsoft Visual C++

      • Microsoft Visual C++ 6

      • Microsoft Visual C++ 9 (2008)

    • Open Watcom C/C++

      • Open Watcom C/C++ 1.0

      • Open Watcom C/C++ 1.1

      • Open Watcom C/C++ 1.2

      • Open Watcom C/C++ 1.3

      • Open Watcom C/C++ 1.4

      • Open Watcom C/C++ 1.5

      • Open Watcom C/C++ 1.6

      • Open Watcom C/C++ 1.7

    • Open64 C/C++

    • PGI C++ Workstation

    • Sun Studio C/C++

      • Sun Studio 11

      • Sun Studio 12

    • Watcom C/C++

      • Watcom C 6.0

      • Watcom C 7.0/386

      • Watcom C 8.0/386

      • Watcom C 8.5/386

      • Watcom C 9.0/386

      • Watcom C 9.01/386

      • Watcom C/C++ 10.0

      • Watcom C/C++ 10.5

      • Watcom C/C++ 10.6

      • Watcom C/C++ 11.0

    • g++

      • g++ 3.4.5

      • g++ 4.x

  • Ceylon

    • Ceylon

      • Ceylon M1

  • COBOL

    • NetCOBOL

    • OpenCOBOL

      • OpenCOBOL 1.0

    • TinyCOBOL

      • TinyCOBOL 0.65.9

  • Cool

    • Cool

      • Cool 2008

  • D

    • Digital Mars D

      • D 1.0

      • D 1.001

      • D 1.002

      • D 1.003

      • D 1.004

      • D 1.005

      • D 1.006

      • D 1.007

      • D 1.009

      • D 1.010

      • D 1.011

      • D 1.012

      • D 1.013

      • D 1.014

      • D 1.015

      • D 1.016

      • D 1.017

      • D 1.018

      • D 1.019

      • D 1.020

      • D 1.021

      • D 1.022

      • D 1.023

      • D 2.000

      • D 2.001

      • D 2.002

      • D 2.003

      • D 2.004

      • D 2.005

      • D 2.006

      • D 2.007

      • D 2.008

      • D 2.009

    • GDC

      • GDC 0.11

      • GDC 0.12

      • GDC 0.12.1

      • GDC 0.13

      • GDC 0.14

      • GDC 0.15

      • GDC 0.16

      • GDC 0.17

      • GDC 0.18

      • GDC 0.19

      • GDC 0.20

      • GDC 0.21

      • GDC 0.22

      • GDC 0.23

      • GDC 0.24

  • Dylan

    • Gwydion Dylan

      • Gwydion Dylan 2.4.0

    • F#

      • F# 1.9.2.9

    • Mono F#

      • fsharp 2.0.0

  • Factor

    • Factor

      • Factor 0.94

  • Falcon

    • Falcon

      • Falcon 0.9.6.6

  • FORTRAN

    • ADAPTOR

    • ANSI-66 FORTRAN

    • Absoft Fortran

    • FORTRAN I

    • FORTRAN II

    • FORTRAN III

    • FORTRAN IV

    • Fx

    • G95

      • g95 0.93

    • GOTRAN

    • HPFC

    • Intel Visual Fortran

      • Intel Visual Fortran 11.1

    • Lahey/Fujitsu Fortran

      • Lahey/Fujitsu Fortran 95 v5.7

      • Lahey/Fujitsu Fortran 95 v6.2

      • Lahey/Fujitsu Fortran v7.1

      • Lahey/Fujitsu Linux64 Fortran 8.0

    • Microway NDP Fortran

    • NAGWare f95

    • NAS FortranPlus

    • Opus

    • PGI Fortran Workstation

    • PSR VAST/f90

    • SHPF

    • SNI F77

    • VAST/77to90

    • f2c

      • f2c 20090411

    • f77

    • g77

    • gfortran

      • gfortran 4.5.0

    • pg77

  • Groovy

    • Groovy

      • Groovy 1.7

  • Java

    • Sun Java

      • Sun Java 6

    • gcj

      • gcj 3.4.5

  • LUX

  • MATLAB

    • GNU Octave

      • GNU Octave 3.2.3

  • Nemerle

    • Nemerle

      • ncc 0.9.3

  • Nimrod

    • Nimrod

      • Nimrod 0.8.8

  • Objeck

    • Objeck

      • Objeck 2.0.3

  • Objective-C

    • Apple Objective C

    • Portable Object Compiler

    • gcc (Objective-C)

      • gcc 3.4.5 (Objective-C)

  • Onyx

    • Onyx

      • Onyx 5.1.2

    • Mozart

      • Mozart 1.4.0

  • Perl

    • Perl

      • Perl 5.12.1

    • Perl 6

      • rakudo-2010.08

  • PHP

    • PHP

      • PHP 5.2.4

      • PHP 5.3.2

  • Pike

    • Pike

      • Pike 7.6

      • Pike 7.8

  • Processing

    • Processing

      • Processing 1.5.1

  • R

    • R

      • R 2.10.1

  • REXX

    • Regina

      • Regina 3.3

    • Scala for JVM

      • Scala 1.0.0-b2

      • Scala 1.0.0-b4

      • Scala 1.0.0-b5

      • Scala 1.0.0-b6

      • Scala 1.0.0-b8

      • Scala 1.1.0-b1

      • Scala 1.1.0-b3

      • Scala 1.1.1.0

      • Scala 1.1.1.3

      • Scala 1.2.0.0

      • Scala 1.2.0.1

      • Scala 1.3.0.10

      • Scala 1.3.0.2

      • Scala 1.3.0.3

      • Scala 1.3.0.4

      • Scala 1.3.0.7

      • Scala 1.3.0.9

      • Scala 1.4.0.0

      • Scala 1.4.0.1

      • Scala 1.4.0.2

      • Scala 1.4.0.3

      • Scala 1.4.0.4

      • Scala 2.0.0

      • Scala 2.1.0

      • Scala 2.1.1

      • Scala 2.1.2

      • Scala 2.1.3

      • Scala 2.1.4

      • Scala 2.1.5

      • Scala 2.1.6

      • Scala 2.1.7

      • Scala 2.1.8

      • Scala 2.2.0

      • Scala 2.3.0

      • Scala 2.3.1

      • Scala 2.3.2

      • Scala 2.3.3

      • Scala 2.4.0-final

      • Scala 2.5.0-final

      • Scala 2.5.1-final

      • Scala 2.6.0-final

      • Scala 2.7.7-final

      • Scala 2.8.0-final

  • Scratch

    • Seed7

      • Seed7 2007-06-07

      • Seed7 2007-06-24

      • Seed7 2007-07-23

      • Seed7 2007-08-23

      • Seed7 2012-01-01

  • Simula

  • Smalltalk

    • GNU Smalltalk

      • gst 3.1

    • Squeak





СРС № 2

Тема: Библиотека визуальных компонентов

Цель: знать предназначение библиотеки
Библиотека визуальных компонентов (Visual Component Library, сокращенно — VCL) содержит большое количество классов, предназначенных для быстрой разработки приложений. Библиотека написана на Object Pascal и непосредственно связана с интегрированной средой разработки приложений Delphi. Несмотря на название, в VCL содержатся главным образом невизуальные компоненты, однако имеются и визуальные, а также другие классы, начиная с абстрактного класса TObject. При этом все компоненты являются классами, но не все классы являются компонентами.

В Delphi 7 также имеется возможность использовать библиотеку CLX (межплатформенный вариант библиотеки VCL) для разработки приложений под Windows и Linux.

Все классы VCL расположены на определенном уровне иерархии и образуют дерево (иерархию) классов. Знание происхождения объекта оказывает значительную помощь при его изучении, т. к. потомок наследует все элементы объекта-родителя. Так, если свойство caption принадлежит классу TControl, то это свойство будет и у его потомков, например, у классов TButton и TCheckBox, и у компонентов— кнопки Button и флажка CheckBox соответственно. Фрагмент иерархии классов с важнейшими классами показан ниже на схеме.

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

Класс TObject — общий предок всех классов Object Pascal — находится в корне иерархии. Этот класс является абстрактным и реализует наиболее общие для всех классов-потомков методы, важнейшими из которых являются:


  • Create (создание объекта);

  • Destroy (удаление объекта);

  • Free (удаление объекта, созданного методом create, при этом вызывается и метод Destroy).

Большинство этих методов переопределяются в классах-потомках. Дадим краткую характеристику важнейшим классам-потомкам TPersistent, TComponent и TControl, к которым относится большинство общих свойств, методов и событий и которые, в свою очередь, также порождают множество классов.

Класс TPersistent является абстрактным классом для тех объектов, свойства которых загружаются из потока и сохраняются в потоке. Механизм потоков используется для работы с памятью (обычно дисковой или оперативной). В дополнение к методам класса TObject класс TPersistent имеет метод Assign, позволяющий передавать поля и свойства одного объекта другому.

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

Основные свойства TComponent.



  • Components (список принадлежащих компонентов);

  • Сomponentcount (число принадлежащих компонентов);

  • Component index (номер компонента в списке принадлежащих компонентов);

  • Сomponentstate (состояние текущего компонента);

  • Name (имя компонента);

  • Owner (владелец компонента);

  • Tag (целое значение, хранимое вместе с компонентом).

Основные методы класса TComponent:

  • DestroyComponents (разрушает все принадлежащие компоненты);

  • Destroying (уведомляет принадлежащий компонент о его разрушении);

  • FindComponent (находит компонент в списке Components).

От класса TComponent происходят визуальные и невизуальные компоненты. Многие невизуальные компоненты порождены непосредственно от класса TComponent, например, таймер (Timer).

Компонент Timer позволяет реализовать выполнение действий через определенные интервалы времени. Для этого используется событие onTimer типа TNotifyEvent, генерируемое по истечении заданного интервала времени. Интервал времени в миллисекундах задается свойством Interval типа Cardinal и по умолчанию равен 1000, что соответствует тиканью таймера через 1 секунду. Если установить интервал равным нулю, то таймер остановится и не будет генерировать события onTimer. Остановить таймер также можно, присвоив значение False свойству Enabled.

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

Класс TControl является базовым классом для визуальных компонентов (элементов управления) и обеспечивает основные средства для их функционирования, в том числе прорисовку на экране. Все визуальные компоненты делятся на оконные и графические, происходящие, соответственно, от классов TWinControl и TGraphicControl.



СРС № 3

Тема: Методы программирования сетевых приложений

Цель: знать методы программирования сетевых приложений
В области компьютеризации понятие программирования сетевых задач или иначе называемого сетевого программирования (англ. network programming), довольно сильно схожего с понятиями программирование сокетов и клиент-серверное программирование, включает в себя написание компьютерных программ, взаимодействующих с другими программами посредством компьютерной сети. Программа или процесс, инициирующие установление связи, называются клиентским процессом, а программа, ожидающая инициации связи, называется серверным процессом. Клиентский и серверный процессы вместе образуют распределенную систему. Связь между клиентским и серверным процессами может быть или на основе соединений (как например, TCP-протокол, устанавливающий виртуальное соединение или сессию), или без соединений (на основе UDP-датаграмм).

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

Сокеты обычно реализуются библиотекой интерфейса программирования приложений (API), как например, сокеты Беркли, впервые представленные в 1983 году. Большинство реализаций основаны на сокетах Беркли, например, Winsock, представленный в 1991 году. Существуют и другие реализации API сокетов, например, Интерфейс транспортного уровня (TLI) на основе STREAMS.

Ниже следуют примеры функций или методов, обычно реализуемые библиотекой API:



  • socket() создает новый сокет определенного типа, идентифицируемый при помощи целого числа, после чего выделяет ему системные ресурсы.

  • bind(), как правило, используется на серверной стороне; ассоциирует сокет с адресной структурой сокетов, то есть определенным номером локального порта и IP-адресом.

  • listen() используется на стороне сервера; переводит TCP-сокет в режим прослушивания.

  • connect() используется на клиентской стороне; привязывает номер незанятого локального порта к сокету. В случае с TCP-сокетом, вызывает попытку установить новое TCP-соединение.

  • accept() используется на стороне сервера. Данная функция принимает полученную попытку создания нового TCP-соединения от удаленного клиента и создает новый сокет, ассоциированный с парой сокетных адресов этого соединения.

  • send() и recv() или write() и read() или recvfrom() и sendto() используются для отправки и получения данных к/от удаленного сокета.

  • close() вызывает освобождение системных ресурсов, выделенных сокету. В случае TCP, соединение завершается.

СРС № 4

Тема: Программирование для Интернет

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

Клиентские языки


Как следует из названия, программы на клиентских языках обрабатываются на стороне пользователя, как правило их выполняет браузер. Это и создает главную проблему клиентских языков — результат выполнения программы (скрипта) зависит от браузера пользователя. То есть если пользователь запретил выполнять клиентские программы, то они исполняться не будут, как бы ни желал этого программист. Кроме того, может произойти такое, что в разных браузерах или в разных версиях одного и того же браузера один и тот же скрипт будет выполняться по-разному. С другой стороны, если программист возлагает надежды на серверные программы, то он может упростить их работу и снизить нагрузку на сервер за счет программ, исполняемых на стороне клиента, поскольку они не всегда требуют перезагрузку (генерацию) страницы. Самыми распространенными клиентскими языками программирования являются:

  • JavaScript

  • VBScript

  • ActionScript

  • Java

Серверные языки


Когда пользователь дает запрос на какую-либо страницу (переходит на неё по ссылке или вводит адрес в адресной строке своего браузера), то вызванная страница сначала обрабатывается на сервере, то есть выполняются все программы, связанные со страницей, и только потом возвращается к посетителю по сети в виде файла. Этот файл может иметь расширения: HTML, PHP, ASP, ASPX, Perl, SSI, XML, DHTML, XHTML.

Работа программ уже полностью зависима от сервера, на котором расположен сайт, и от того, какая версия того или иного языка поддерживается. Список серверных языков программирования: PHP, Perl, Python, Ruby, любой .NET язык программирования (технология ASP.NET), Java, Groovy.



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

  • Firebird

  • IBM DB2

  • IBM DB2 Express-C

  • Microsoft SQL Server

  • Microsoft SQL Server Express

  • mSQL

  • MySQL

  • Oracle

  • PostgreSQL

  • SQLite

  • Sybase Adaptive Server Enterprise

  • ЛИНТЕР

  • MongoDB

Примерные вопросы:

  1. Объектно-ориентированное программирование. Основные принципы ООП.

  2. Объектно-ориентированное программирование. Инкапсуляция. Наследование. Полиморфизм.

  3. Описание объектового типа. Виртуальные методы.

  4. Динамическое создание объектов. Конструкторы и деструкторы. Скрытые поля и методы.

  5. Теоретические основы объектно-ориентированного программирования. От процедурного программирования к объектному.

  6. Основные принципы и этапы ООП. Объектная декомпозиция.

  7. Теоретические основы объектно-ориентированного программирования. Объекты и сообщенния. Классы.

  8. Основные средства разработки классов. Дополнительные средства разработки классов.

  9. Среда визуального программирования. Формы приложения. Компоненты формы.

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

  11. Среда визуального программирования. Компоненты библиотеки VCL Delphi. Кнопки, индикаторы, управляющие элементы библиотеки VCL Delphi.

  12. Компоненты ввода и отображения текстовой информации.

  13. Среда визуального программирования. Компоненты отображения табличных данных.

  14. Компоненты отображения иерархических данных. Компоненты – меню.

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

  16. Системные диалоги. Организация управления приложением. Диспетчеризация действий.

  17. Объектная модель Delphi Pascal. Определение класса. Особенности реализации переопределения методов.

  18. Виртуальные методы. Абстрактные методы. Перегрузка методов.

  19. Объектная модель Delphi Pascal. Свойства. Простые свойства. Свойства – массивы. Индексированные свойства.

  20. Метаклассы. Ссылка на класс (метакласс). Операции is и as. Методы класса.

  21. Объектная модель Delphi Pascal. Механизм определения типов на этапе выполнения программы.

  22. Делегирование методов. Библиотека стандартных классов Delphi. Отношения «основной - вспомогательный» и «старший - младший».

  23. Создание и обработка сообщений и событий. Сообщения Delphi. Методы обработки сообщений. Генерация сообщений.

  24. Создание событий. Обработка сообщений VCL. Управление циклом обработки сообщений.

  25. Обработка исключений. Структура фрагментов с исключениями.

  26. Создание исключений. Генерация исключений. Обработка исключений.
1   2   3   4   5   6   7


База данных защищена авторским правом ©infoeto.ru 2022
обратиться к администрации
Как написать курсовую работу | Как написать хороший реферат
    Главная страница