Разработка классов предметной области "Кошки"

 

Кафедра КТиС














ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

к курсовой работе

по дисциплине: Языки программирования и методы трансляции

на тему: Разработка классов предметной области «Кошки»












Введение


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

Фактически объект стал отражать как реальные, так и абстрактные понятия окружающего мира. Работать с привычными понятиями легче, чем с абстрактными числами.

Специалистам - программистам удалось выделить и разработать большой набор абстрактных объектов, которые используются при создании программ. Эти объекты в Delphi называются компонентами и представлены в палитре компонент. Эти объекты можно использовать в различных проектах и сколько угодно раз, без затраты времени на их программирование. Примером компонентов являются Label, Edit. и так далее.


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


Одним из шагов в развитии технологий программирования было появление объектно-ориентированного программирования. Здесь программный код перестал быть "плоским" и программист оперирует не просто процедурами и функциями, а целыми объектами.

Объект - совокупность свойств, методов, событий. Что означает "совокупность"? Это значит, что объект как бы состоит из методов, свойств и событий, и они обеспечивают его полноценную работу. Представим себе кнопку. Она обладает:

свойствами (цвет, текст на кнопке, шрифт текста и так далее);

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

методами (обеспечивающими работу кнопки, например, метод прорисовки текста, прорисовки фокуса и так далее).

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

Свойства - это переменные, которые влияют на состояние объекта. Например, ширина, высота.

Методы - это те же процедуры и функции, то есть это то, что объект умеет делать (вычислять). Например, объект может иметь процедуру для вывода какого-то текста на экран. Эта процедура и есть метод, который принадлежит объекту.

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

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

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

События - наиболее сложная часть объектов, но на практике работа с ними намного проще.

Теперь рассмотрим работу свойств, методов и событий как единого целого.

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

Свойства:

левая позиция (X);

верхняя позиция (Y);

ширина;

высота;

заголовок;

методы:

создать кнопку;

уничтожить кнопку;

нарисовать кнопку;

события:

кнопка нажата;

заголовок кнопки изменен.

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

У каждого объекта обязательно присутствуют два метода: "создать объект" и "уничтожить объект". Во время создания объекта происходит выделение памяти для хранения необходимых свойств, и заполняются значения по умолчанию. Во время уничтожения объекта происходит освобождение выделенной памяти.

Класс в Delphi это структурированный тип данных (как array, record) , конкретный экземпляр класса (переменная типа класс) называется объектом. Объекты относятся к динамическим структурам данных т.е. они обязательно должны создаваться (удаляться) на этапе выполнения проекта.

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

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

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

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

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

  • Public - члены класса находящиеся в данном разделе доступны из любой точки программы
  • Private - этот раздел накладывает самые жесткие требования на видимость. Члены класса в данном разделе доступны только в текущем модуле. Как правило, в данную секцию помещают поля.
  • Protected - в отличие от Private члены из этого класса доступны в классах наследниках описанных в других модулях
  • Published - в этом разделе располагаются свойства класса, доступные из Инспектора Объектов, что позволяет их менять на этапе проектирования. Область видимости совпадает с Public.

По умолчанию считается, что все поля расположены в разделе Private.

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

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

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

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

В класс можно включать несколько конструкторов. При создании объекта использовать любой конструктор из данного класса или родительского класса. Если в описании класса отсутствует конструктор, то при создании объекта можно использовать любой конструктор из родительского класса.

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

Принцип наследования приводит к созданию ветвящегося дерева классов, постепенно разрастающегося при перемещении от TObject к его потомкам. Каждый потомок дополняет возможности своего родителя новыми свойствами и передает их своим потомкам.

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

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

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

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

Методы, определенные в классе, могут быть статическими, виртуальными, динамическими или абстрактными. Тип метода определяется механизмом перекрытия его в потомках.

Для статических методов перекрытие осуществляется компилятором. Например, метод ViewSex класса TPerson1 статически перекрывается одноименным методом класса TPerson2. По умолчанию все методы, описанные в классе, являются статическими.

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

Так из описания классов TPerson2 и TPerson3 следует что, метод ViewSex класса TPerson2 является виртуальным и перекрывается одноименным методом класса TPerson3.

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

Абстрактными называются виртуальные или динамические методы, которые определены в классе, но не содержат никаких действий, никогда не вызываются и обязательно должны быть переопределены в классах-потомках. Объявляется абстрактный метод при помощи зарезервированного слова abstract, расположенного после слов virtual или dynamic.

Основное предназначение абстрактных методов - быть родоначальником иерархии конкретных методов в классах-потомках.

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

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

Все методы являются методами класса, а не объекта, поэтому при описании метода в названии используется имя класса (например, TPerson1.ViewSex ).

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

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

Компонент в Delphi представляют класс, а компонент установленный на форму уже конкретный объект. При работе с классами - компонентами, система автоматически создает (при установке компонента на форму) и удаляет (при удалении компонента) объекты.


2. Разработка классов транспортных средств


Разработать классы и создать приложение:

  1. Разработать класс, который инкапсулирует информацию о транспортных средствах, таких как легковые автомобили, автобусы, грузовики. Этот класс (Vehicle) должен хранить следующие данные - количество Мест (Seats), объем бака (Сap), расстояние (mpl), которое проедет автомобиль, используя один литр топлива.
  2. В классе использовать 3 поля (FSeats, Ffuelcap, Fmpl);
  3. Создать объект Motor.
  4. Ввести значения полей(FSeats, FCap, Fmpl).
  5. Найти максимальное расстояние, которое может пройти автомобиль Motor, имея полный бак.
  6. Создать класс (Vehicle1) , который является наследником класса Vehicle, определить в нем 3 свойства Passengers (число пассажиров), Fuel (топлива в баке), Mpl, все типа Byte. Последнее свойство работает только на чтение. В процедурах записи значений свойств Passengers, Fuel использовать ограничения.
  7. В классе Vehicle1, определить метод (MaxDistance), который определяет максимальную дальность поездки, с данной заправкой топливного бака.
  8. Для класса Vehicle1 разработать конструктор с начальной инициализацией. При этом бак должен быть заполнен наполовину, пассажиров столько сколько мест.
  9. Создать объект Motor1 класса Vehicle1.
  10. Ввести значения свойств (Passengers, Fuel).
  11. Вывести максимальную дальность поездки.
  12. Ввести расстояние, которое должен пройти автомобиль Motor1 и найти оставшееся количество топлива.
  13. Создать класс (Vehicle2) , который является наследником класса Vehicle1, переопределить в нем метод (MaxDistance), который определяет максимальную дальность поездки, учетом числа пассажиров (пробег авто на 1 литр бензина уменьшается на (k-1), где к - число пассажиров).
  14. В классе Vehicle2 определить метод FuelNeeded, который на заданное расстояние возвращает необходимое количество топлива.
  15. Создать объект Motor2 класса Vehicle2, используя конструктор класса Vehicle1.
  16. Присвоить объекту Motor1 данные объекту Motor2.
  17. Ввести расстояние, и определить необходимое количество топлива для автомобилей Motor1 и Motor2.

Исходный текст Delphi приложения:

unit Unit1;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Spin;

TForm1 = class(TForm)

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Button1: TButton;

Label4: TLabel;

Button3: TButton;

SpinEdit1: TSpinEdit;

SpinEdit2: TSpinEdit;

SpinEdit3: TSpinEdit; Button3Click(Sender: TObject); Button1Click(Sender: TObject);

{ Private declarations }

public

{ Public declarations }

end;

TVehicle = class(TObject)

Fseats, Ffuelcap, Fmpl: integer; Create1;;

TVehicle1 = class(TVehicle)

FPassengers, FFuel: byte; GetPassegers:byte; SetPassegers(N:byte); GetFuel:byte; SetFuel(N:byte); Getmpl:integer; Create2; Passengers:byte read GetPassegers write SetPassegers; Fuel:byte read GetFuel write SetFuel; mpl:integer read Getmpl; MaxDistance:byte; virtual;;

TVehicle2 = class(TVehicle1) MaxDistance:byte; override;;

Form1: TForm1;

Motor: TVehicle;

Motor1: TVehicle1;

Motor2: TVehicle2; TVehicle.Create1; Create;

Fseats:=1;

FFuelcap:=1;

Fmpl:=1;;

{$R *.dfm}

constructor TVehicle1.Create2; Create;

Fseats:=2;

FFuelcap:=2;

Fmpl:=1;

Passengers:=Fseats;

Fuel:=FFuelcap div 2;; TVehicle1.GetPassegers:byte;

Result:=FPassengers;; Tvehicle1.SetPassegers(N:byte); N>Fseats then FPassengers:=N else showmessage('Число пассажиров не может быть больше числа мест');; TVehicle1.GetFuel:byte;

begin

Result:=FFuel;;

procedure Tvehicle1.SetFuel(N:byte); N>Ffuelcap then FFuel:=N else showmessage('указано число превышающее вместимость бака');; TVehicle1.Getmpl:integer;

Result:=Fmpl;; TVehicle1.MaxDistance: byte;

Result:=Ffuel div Fmpl;; Tvehicle2.MaxDistance:byte;

Result:=Ffuel div (Fmpl-(Passengers-1));; TForm1.Button3Click(Sender: TObject);

motor.Free;

close;; TForm1.Button1Click(Sender: TObject);

Motor:=TVehicle.Create1;

Motor.Fseats:=strtoint(spinEdit1.Text);

Motor.Ffuelcap:=strtoint(spinEdit2.Text);

Motor.Fmpl:=strtoint(spinEdit3.Text);

Label4.Caption:='Максимальное расстояние '+inttostr(Motor.Ffuelcap div Motor.Fmpl)+' км';

end;

3. Разработка структур классов (Кошки)


Исходный текст программы, содержащей классы, служащие для описания объектов типа «кошки»:

unit CatSource1;

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, jpeg, ExtCtrls, StdCtrls;

TForm1 = class(TForm)

Edit1: TEdit;

ComboBox1: TComboBox;

Edit2: TEdit;

Edit4: TEdit;

Image1: TImage;

GroupBox1: TGroupBox;

GroupBox2: TGroupBox;

GroupBox3: TGroupBox;

Memo1: TMemo;

Button1: TButton;

Button2: TButton;

Button3: TButton;

Button4: TButton;

Button5: TButton;

Button6: TButton;

Button7: TButton;

Button8: TButton;

Button9: TButton;

Button10: TButton;

Button11: TButton; Button1Click(Sender: TObject); Button2Click(Sender: TObject); Button3Click(Sender: TObject); Button4Click(Sender: TObject); Button5Click(Sender: TObject); Button6Click(Sender: TObject); Button7Click(Sender: TObject); Button8Click(Sender: TObject); Button9Click(Sender: TObject); Button10Click(Sender: TObject); Button11Click(Sender: TObject); FormActivate(Sender: TObject);

{ Private declarations }

public

{ Public declarations }

end;

TCats1 = class(TObject)

FName: string;

FSex: byte; Create1; GetName:string; SetName(N:string); GetSex:string; SetSex(S:string); Name:string read GetName write SetName; Sex:string read GetSex write SetSex; CatDescription:string;;

TCats2 = class(TCats1)

//FAge: byte; Create2; GetAge:byte; SetAge(A:byte); Age:byte read GetAge write SetAge; CatDescription:string; virtual;;

TCats3 = class(TCats2)

//FBreed

//FColor: string; Create3; GetColor:string; SetColor(C:string); Color:string read GetColor write SetColor; CatDescription:string; override;;

Form1: TForm1;

Cat1: TCats1;

Cat2: TCats2;

Cat3: TCats3;

LastUsedCat:byte;

{$R *.dfm}

//constructors

constructor TCats1.Create1; Create;

Name:='Lucky';

Sex:='male cat';; TCats2.Create2; Create1;

Age:=1;; TCats3.Create3; Create2;

Color:='black';;

//functions and procedures for classes

//TCats1

function TCats1.GetName;

Result:=FName;; TCats1.SetName(N:string);

FName:=N;; TCats1.GetSex:string; FSex=1 then Result:='male cat' else Result:='female cat';; TCats1.SetSex(S:string); S='male cat' then FSex:=1 else if S='female cat' then Fsex:=0 else showmessage ('Пол указан неверно');; TCats1.CatDescription:string;

Result:='This cat is a '+Sex+', name''s '+Name;;

//TCats2

function TCats2.GetAge:byte;

Result:=FAge;; TCats2.SetAge(A:byte);

FAge:=A;; TCats2.CatDescription:string; AgeDescription:string; Age<3 then ageDescription:='a young' else if Age<5 then ageDescription:='a mature' else AgeDescription:='an old';

Result:='This cat is '+ageDescription+' '+Sex+', name''s '+Name;;

//TCats3

function TCats3.GetColor:string;

Result:=FColor;; TCats3.SetColor(C:string);

FColor:=C;; TCats3.CatDescription:string; AgeDescription:string; Age<3 then ageDescription:='a young' else if Age<5 then ageDescription:='a mature' else AgeDescription:='an old';

Result:='This cat is '+ageDescription+' '+Color+' '+Sex+', name''s '+Name;;

//Other things like button events handlers etc.

procedure TForm1.Button1Click(Sender: TObject);

Cat1.Free;

Cat2.Free;

Cat3.Free;

close;; TForm1.Button2Click(Sender: TObject);

Cat1:=TCats1.Create1;

LastUsedCat:=1;; TForm1.Button3Click(Sender: TObject);

Memo1.Lines.Add(Cat1.CatDescription); on EAccessViolation

do

showmessage('Create a cat first');; TForm1.Button4Click(Sender: TObject);

Edit1.Text:=Cat1.Name; Cat1.Sex='male cat' then ComboBox1.ItemIndex:=1 else ComboBox1.ItemIndex:=2; on EAccessViolation

do

showmessage('You should have a cat first');; TForm1.Button5Click(Sender: TObject);

Cat2:=TCats2.Create2;

LastUsedCat:=2;; TForm1.Button6Click(Sender: TObject);

Memo1.Lines.Add(Cat2.CatDescription); on EAccessViolation

do

showmessage('Create a cat first');; TForm1.Button7Click(Sender: TObject);

Edit1.Text:=Cat2.Name; Cat2.Sex='male cat' then ComboBox1.ItemIndex:=1 else ComboBox1.ItemIndex:=2;

Edit2.Text:=inttostr(Cat2.Age); on EAccessViolation

do

showmessage('You should have a cat first');


end; TForm1.Button8Click(Sender: TObject);

Cat3:=TCats3.Create3;

LastUsedCat:=3;; TForm1.Button9Click(Sender: TObject);

Memo1.Lines.Add(Cat3.CatDescription); on EAccessViolation

do

showmessage('Create a cat first');; TForm1.Button10Click(Sender: TObject);

Edit1.Text:=Cat3.Name; Cat3.Sex='male cat' then ComboBox1.ItemIndex:=1 else ComboBox1.ItemIndex:=2;

Edit2.Text:=inttostr(Cat3.Age);

Edit4.Text:=Cat3.Color; on EAccessViolation

do

showmessage('You should have a cat first');; TForm1.Button11Click(Sender: TObject); LastUsedCat = 1 then

Cat1.Name:=Edit1.Text; ComboBox1.ItemIndex=1 then Cat1.Sex:='male cat' else Cat1.Sex:='female cat'; if LastUsedCat = 2 then

Cat2.Name:=Edit1.Text; ComboBox1.ItemIndex=1 then Cat2.Sex:='male cat' else Cat2.Sex:='female cat';

try

Cat2.Age:=strtoint(Edit2.Text); on EConvertError

do

showmessage('Age should have an integer value'); if LastUsedCat = 3 then

Cat3.Name:=Edit1.Text; ComboBox1.ItemIndex=1 then Cat3.Sex:='male cat' else Cat3.Sex:='female cat';

Cat3.Age:=strtoint(Edit2.Text); on EConvertError

do

showmessage('Age should have an integer value');

Cat3.Color:=Edit4.Text; showmessage('There is no cats here yet.');; TForm1.FormActivate(Sender: TObject);

begin

LastUsedCat:=0;;.


Заключение

программирование инкапсуляция полиморфизм

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


Список использованных источников


  1. Баас, Р. Delphi 5 для пользователя. [Текст]: Издательская группа BHV 2000. - 496 с.
  2. Епашнеков, А. Программирование в среде Delphi [Текст]: учебное пособие. В 4-х ч. Ч. 1./ под ред. А. Епашнеков, В. Епашнеков - М.: ДИАЛОГ-МИФИ, 1998. - 336с.
  3. Фаронов, В.В. Delphi 4. Учебный курс [Текст]: / В.В. Фаронов. - М.: Нолидж 1998. - 450 с.
  4. Фаронов, В.В. Turbo Pascal 7.0. Начальный курс. [Текст]: учебное пособие / В.В. Фаронов. - М.: Нолидж 1997. - 616 с.
  5. Фаронов, В.В. Turbo Pascal 7.0. Практика программирования. [Текст]: учебное пособие. / В.В. Фаронов. - М.: Нолидж 1997. - 432 с.
  6. Бобровский, С. Delphi 7. Учебный курс. [Текст]: / С. Бобровский. - Питер, 2003. - 736 стр.
  7. Программирование и отладка в Delphi. [Текст]: учебное пособие под ред. К. Митчелл, К. Керман - Издательский дом Вильямс , 2003. - 672 стр.
  8. Культин И.Б. Программирование в Turbo Pascal 7.0 и Delphi. [Текст]: Киев, BHV, 1997. - 372 стр.
  9. Архангельский А. Я. Программирование в Delphi 7. [Текст]: ООО Бином-Пресс, 2005. - 1152 стр.
  10. Гофман В. Э., Хомоненко А. Д. Delphi 6. [Текст]: ООО БХВ-Петербург, 2002. - 1152 стр.
  11. Дарахвелидзе П. Г., Марков Е. П. Программирование в Delphi 7. [Текст]: ООО БХВ-Петербург, 2003. - 784 стр.
  12. Кандзюба С., П. Delphi. Базы данных и приложения. [Текст]: ООО ДиаСофтЮП, 2005. - 576 стр.

Кафедра КТиС ПОЯСНИТЕЛЬНАЯ ЗАПИСКА к курсовой работе по дисциплине: Языки программирования и методы

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2019 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ