Разработка программы

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

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 07.05.2012
Размер файла 124,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Размещено на http://www.allbest.ru/

Постановка задачи

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

Описание входных и выходных документов комплекса программ

Сетевой трафик - количество переданных данных через сетевой интерфейс за единицу времени.

Ко входным параметрам программы относятся:

- Получение информации об установленной в компьютере сетевой карте при помощи интерфейса WinSock;

- получение информации о сетевом трафике каждого сетевого интерфейса;

К выходным параметрам программы относится:

- время запуска программы;

- Количество переданных данных;

- время работы программы;

- MAC-адрес сетевой карты;

- Идентификатор сетевого оборудования;

- Скорость подключения (линии).

Описание комплекса программ

Для написания программы была выбрана среда разработки Delphi 7 с интегрированными компонентами WinSock, необходимыми для работы с сетью Windows.

Borland Delphi - интегрированная среда разработки ПО для Microsoft Windows на языке Delphi (ранее носившем название Object Pascal), созданная первоначально фирмой Borland и на данный момент принадлежащая и разрабатываемая Embarcadero Technologies. Embarcadero Delphi является частью пакета Embarcadero RAD Studio и поставляется в четырёх редакциях: Starter, Professional, Enterprise и Architect.

NET Framework - программная платформа, выпущенная компанией Microsoft в 2002 году. Основой платформы является исполняющая среда Common Language Runtime (CLR), способная выполнять как обычные программы, так и серверные веб-приложения. NET Framework поддерживает создание программ, написанных на разных языках программирования.

Считается, что платформа.NET Framework явилась ответом компании Microsoft на набравшую к тому времени большую популярность платформу Java компании Sun Microsystems (ныне принадлежит Oracle).

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

Создание проекта

Отладка и тестирование программы

Отладка программы

Для проверки программы на ошибки необходимо в среде разработки Delphi 7 запустить процесс компиляции, нажав клавиши Ctrl+F9, в случае завершении компиляции без ошибок можно приступать к запуску на исполнение программы нажатием клавиши F9. Во время запуска программы, используя модуль WinSock, с сетевого оборудования компьютера информация заносится в соответствующие поля программы для дальнейшей обработки. Во время работы программа отображает количество переданных данных по каждому сетевому интерфейсу ПК, с целью учета количества переданной информации (рисунок 1.1).

Рисунок 1.1 - Окно работы приложения

Листинг программы

unit MainFormUnit;

interface

uses

Windows, Graphics, ExtCtrls, Controls, StdCtrls, Buttons, Tabs,

ComCtrls, Classes, SysUtils, Forms, dialogs,

TrafficUnit, IPHelper, IPHLPAPI, ShellAPI;

type

TMainForm = class(TForm)

pnlMain: TPanel;

pnlBottom: TPanel;

pc: TPageControl;

tsTraffic: TTabSheet;

ExitButton: TButton;

TrafficTabs: TTabSet;

GroupBox: TGroupBox;

ledAdapterDescription: TLabeledEdit;

UnFreezeButton: TBitBtn;

FreezeButton: TBitBtn;

ClearCountersButton: TBitBtn;

ledMACAddress: TLabeledEdit;

gbIN: TGroupBox;

ledOctInSec: TLabeledEdit;

ledAvgINSec: TLabeledEdit;

ledPeakINSec: TLabeledEdit;

ledTotalIN: TLabeledEdit;

gbOUT: TGroupBox;

ledOctOUTSec: TLabeledEdit;

ledAvgOUTSec: TLabeledEdit;

ledPeakOUTSec: TLabeledEdit;

ledTotalOUT: TLabeledEdit;

Timer: TTimer;

gbTime: TGroupBox;

ledStartedAt: TLabeledEdit;

ledActiveFor: TLabeledEdit;

RemoveInactiveButton: TBitBtn;

StatusText: TStaticText;

cbOnTop: TCheckBox;

ledSpeed: TLabeledEdit;

procedure TimerTimer (Sender: TObject);

procedure ClearCountersButtonClick (Sender: TObject);

procedure cbOnTopClick (Sender: TObject);

procedure FormDestroy (Sender: TObject);

procedure TrafficTabsChange (Sender: TObject; NewTab: Integer;

var AllowChange: Boolean);

procedure ExitButtonClick (Sender: TObject);

procedure FormCreate (Sender: TObject);

procedure FreezeButtonClick (Sender: TObject);

procedure UnFreezeButtonClick (Sender: TObject);

procedure RemoveInactiveButtonClick (Sender: TObject);

procedure pcChange (Sender: TObject);

procedure ledAdapterDescriptionChange (Sender: TObject);

private

procedure HandleNewAdapter (ATraffic: TTraffic);

procedure HandleFreeze (ATraffic: TTraffic);

procedure HandleUnFreeze (ATraffic: TTraffic);

function LocateTraffic (AdapterIndex: DWord): TTraffic;

procedure ProcessMIBData;

procedure ClearDisplay;

procedure RefreshDisplay;

public

{Public declarations}

end;

var

MainForm: TMainForm;

ActiveTraffic: TTraffic;

implementation

{$R *.dfm}

procedure TMainForm. ClearDisplay;

var

j:integer;

begin

TrafficTabs. Tabs. Clear;

StatusText. Caption:='';

for j:=0 to GroupBox. ControlCount-1 do

begin

if GroupBox. Controls[j] is TCustomEdit

then TCustomEdit (GroupBox. Controls[j]).Text:='';

end;

end;

procedure TMainForm. TimerTimer (Sender: TObject);

begin

Timer. Enabled:=false;

ProcessMIBData;

Timer. Enabled:=true;

end;

procedure TMainForm. ClearCountersButtonClick (Sender: TObject);

begin

ActiveTraffic. Reset;

RefreshDisplay;

end;

procedure TMainForm.cbOnTopClick (Sender: TObject);

begin

if cbOnTop. Checked=true

then FormStyle:=fsSTAYONTOP

else FormStyle:=fsNORMAL;

end;

procedure TMainForm. FormDestroy (Sender: TObject);

var

i: integer;

begin

Timer. OnTimer:=nil;

ActiveTraffic:=nil;

for i:=0 to -1+TrafficTabs. Tabs. Count do

TrafficTabs. Tabs. Objects[i].Free;

end;

procedure TMainForm. TrafficTabsChange (Sender: TObject; NewTab: Integer; var AllowChange: Boolean);

begin

if NewTab=-1

then ActiveTraffic:=nil

else ActiveTraffic:=TTraffic (TrafficTabs. Tabs. Objects[NewTab]);

RefreshDisplay;

end;

procedure TMainForm. ExitButtonClick (Sender: TObject);

begin

Close;

end;

procedure TMainForm. FormCreate (Sender: TObject);

begin

 //do NOT change

Timer. Interval:=1000; // all calculatoins on 1 sec.

 //remove design time testing data

ClearDisplay;

ActiveTraffic:=nil;

pcChange(Sender);

Timer. Enabled:=True;

end;

procedure TMainForm. RefreshDisplay;

begin

if not Assigned(ActiveTraffic)

then

begin

ClearDisplay;

Exit;

end;

with ActiveTraffic do

begin

FreezeButton. Visible:=Connected;

UnFreezeButton. Visible:=Connected;

ClearCountersButton. Visible:=Connected;

RemoveInactiveButton. Visible:=not Connected;

FreezeButton. Enabled:=Running;

UnFreezeButton. Enabled:=not Running;

ledAdapterDescription. Text:=Description;

ledMACAddress. Text:=MAC;

ledSpeed. Text:=BitsToFriendlyString(Speed);

ledOctInSec. Text:=BytesToFriendlyString(InPerSec);

ledPeakInSec. Text:=BytesToFriendlyString(PeakInPerSec);

ledAvgINSec. Text:=BytesToFriendlyString(AverageInPerSec);

ledTotalIN. Text:=BytesToFriendlyString(InTotal);

ledOctOUTSec. Text:=BytesToFriendlyString(OutPerSec);

ledPeakOUTSec. Text:=BytesToFriendlyString(PeakOutPerSec);

ledAvgOUTSec. Text:=BytesToFriendlyString(AverageOutPerSec);

ledTotalOUT. Text:=BytesToFriendlyString(OutTotal);

self.ledStartedAt. Text:=DateTimeToStr(StartedAt);

self.ledActiveFor. Text:=FriendlyRunningTime;

StatusText. Caption:=GetStatus;

end;

end;

procedure TMainForm. ProcessMIBData;

var

MibArr: IpHlpAPI.TMIBIfArray;

i: integer;

ATraffic: TTraffic;

begin

Get_IfTableMIB(MibArr); // get current MIB data

 //Mark not Found as NOT Connected

for i:= 0 to -1 + TrafficTabs. Tabs. Count do

begin

ATraffic:=TTraffic (TrafficTabs. Tabs. Objects[i]);

if ATraffic. Connected

then ATraffic. Found:=false;

end;

 //process

if Length(MibArr)>0

then

begin

for i:=Low(MIBArr) to High(MIBArr) do

begin

ATraffic:=LocateTraffic (MIBArr[i].dwIndex);

if Assigned(ATraffic)

then

begin

 //already connected

ATraffic. NewCycle (MIBArr[i].dwInOctets, MIBArr[i].dwOutOctets, MIBArr[i].dwSpeed);

end

else

begin

 //New one!

ATraffic:=TTraffic. Create (MIBArr[i], HandleNewAdapter);

ATraffic. Found:=true;

ATraffic. OnFreeze:=HandleFreeze;

ATraffic. OnUnFreeze:=HandleUnFreeze;

end;

end;

end;

 //Mark not Found as Inactive

for i:=0 to -1+TrafficTabs. Tabs. Count do

if not TTraffic (TrafficTabs. Tabs. Objects[i]).Found

then TTraffic (TrafficTabs. Tabs. Objects[i]).MarkDisconnected;

RefreshDisplay;

end;

function TMainForm. LocateTraffic (AdapterIndex: DWord): TTraffic;

var

j: cardinal;

ATraffic: TTraffic;

begin

Result:=nil;

if TrafficTabs. Tabs. Count=0

then Exit;

for j:= 0 to -1+TrafficTabs. Tabs. Count do

begin

ATraffic:=TTraffic (TrafficTabs. Tabs. Objects[j]);

if ATraffic. InterfaceIndex=AdapterIndex

then

begin

Result:=ATraffic;

Result. Found:=true;

Break;

end;

end;

end;

procedure TMainForm. HandleNewAdapter (ATraffic: TTraffic);

begin

 //add adapter

TrafficTabs. Tabs. AddObject (ATraffic.IP, ATraffic);

 //select it

TrafficTabs. TabIndex:=-1+TrafficTabs. Tabs. Count;

end;

procedure TMainForm. FreezeButtonClick (Sender: TObject);

begin

ActiveTraffic. Freeze;

end;

procedure TMainForm. UnFreezeButtonClick (Sender: TObject);

begin

ActiveTraffic. UnFreeze;

end;

procedure TMainForm. HandleFreeze (ATraffic: TTraffic);

begin

self. FreezeButton. Enabled:=ATraffic. Running;

self. UnFreezeButton. Enabled:=not ATraffic. Running;

end;

procedure TMainForm. HandleUnFreeze (ATraffic: TTraffic);

begin

self. FreezeButton. Enabled:=ATraffic. Running;

self. UnFreezeButton. Enabled:=not ATraffic. Running;

end;

procedure TMainForm. RemoveInactiveButtonClick (Sender: TObject);

begin

if not ActiveTraffic. Connected

then //just checking

begin

ActiveTraffic. Free;

ActiveTraffic:=nil;

TrafficTabs. Tabs. Delete (TrafficTabs. TabIndex);

TrafficTabs. SelectNext(False);

end;

RefreshDisplay;

end;

procedure TMainForm.pcChange (Sender: TObject);

begin

pnlBottom. Visible:=pc. ActivePage=tsTraffic;

end;

procedure TMainForm.ledAdapterDescriptionChange (Sender: TObject);

begin

 //testing - not working since GroupBox is disabled

ledAdapterDescription. Hint:=ledAdapterDescription. Text;

ledAdapterDescription. ShowHint:=Canvas. TextWidth (ledAdapterDescription. Text)>ledAdapterDescription. ClientWidth;

end;

end.

unit TrafficUnit;

interface

uses SysUtils, Windows, IPHelper, IPHLPAPI;

type

TTraffic = Class;

TNewInstanceEvent = procedure (Sender:TTraffic) of object;

TFreezeEvent = procedure (Sender:TTraffic) of object;

TTraffic = Class

private

FIP: string;

FMac: string;

FInPerSec: Dword;

FInTotal: Dword;

FPeakInPerSec: Dword;

FInterfaceIndex: DWord;

FActiveCountIn: Dword;

FSecondsActive: Cardinal;

FPrevCountIn: DWord;

FDescription: string;

FOutTotal: Dword;

FPeakOutPerSec: Dword;

FOutPerSec: Dword;

FPrevCountOut: DWord;

FActiveCountOut: Dword;

FAverageInPerSec: Dword;

FAverageOutPerSec: Dword;

FStartedAt: TDateTime;

FRunning: boolean;

FOnFreeze: TFreezeEvent;

FOnUnFreeze: TFreezeEvent;

FConnected: boolean;

FFound: boolean;

FSpeed: DWord;

function GetIPFromIFIndex (InterfaceIndex: Cardinal): string;

public

property Found: boolean read FFound write FFound;

property Connected: boolean read FConnected;

property Running: boolean read FRunning;

property InterfaceIndex: DWord read FInterfaceIndex;

property IP: string read FIP;

property Mac: string read FMac;

property Description: string read FDescription;

property StartedAt: TDateTime read FStartedAt;

property SecondsActive: Cardinal read FSecondsActive;

property Speed: DWord read FSpeed;

property ActiveCountIn: Dword read FActiveCountIn; {count of samples where something was received}

property PrevCountIn: DWord read FPrevCountIn; {previous byte count in}

property InPerSec: Dword read FInPerSec; {byte count in of last sample period}

property AverageInPerSec: Dword read FAverageInPerSec; {Average in}

property InTotal: Dword read FInTotal; {total byte count in}

property PeakInPerSec: Dword read FPeakInPerSec; {peak byte count in}

property ActiveCountOut: Dword read FActiveCountOut; {count of samples where something was sent}

property PrevCountOut: DWord read FPrevCountOut; {previous byte count out}

property OutPerSec: Dword read FOutPerSec; {byte count out of last sample period}

property AverageOutPerSec: Dword read FAverageOutPerSec; {Average Out}

property OutTotal: Dword read FOutTotal; {total byte count out}

property PeakOutPerSec: Dword read FPeakOutPerSec; {peak byte count out}

procedure NewCycle (const InOctets, OutOctets, TrafficSpeed: Dword);

procedure Reset;

procedure Freeze;

procedure UnFreeze;

procedure MarkDisconnected;

function GetStatus: string;

function FriendlyRunningTime:string;

constructor Create (const AMibIfRow: TMibIfRow; OnNewInstance: TNewInstanceEvent);

published

property OnFreeze:TFreezeEvent read FOnFreeze write FOnFreeze;

property OnUnFreeze:TFreezeEvent read FOnUnFreeze write FOnUnFreeze;

end;

function BytesToFriendlyString (Value: DWord): string;

function BitsToFriendlyString (Value: DWord): string;

implementation

function BytesToFriendlyString (Value: DWord): string;

const

OneKB=1024;

OneMB=OneKB*1024;

OneGB=OneMB*1024;

begin

if Value<OneKB

then Result:=FormatFloat ('#,##0.00 B', Value)

else

if Value<OneMB

then Result:=FormatFloat ('#,##0.00 KB', Value/OneKB)

else

if Value<OneGB

then Result:=FormatFloat ('#,##0.00 MB', Value/OneMB)

end;

function BitsToFriendlyString (Value: DWord): string;

const

OneKB=1000;

OneMB=OneKB*1000;

OneGB=OneMB*1000;

begin

if Value<OneKB

then Result:=FormatFloat ('#,##0.00 bps', Value)

else

if Value<OneMB

then Result:=FormatFloat ('#,##0.00 Kbps', Value/OneKB)

else

if Value<OneGB

then Result:=FormatFloat ('#,##0.00 Mbps', Value/OneMB)

end;

constructor TTraffic. Create (const AMibIfRow: TMibIfRow; OnNewInstance: TNewInstanceEvent);

var

Descr: string;

begin

inherited Create;

FRunning:=true;

FConnected:=true;

self.FInterfaceIndex:=AMibIfRow.dwIndex;

self.FIP:=GetIPFromIFIndex (self. InterfaceIndex);

self.FMac:=MacAddr2Str (TMacAddress(AMibIfRow.bPhysAddr), AMibIfRow.dwPhysAddrLen);

SetLength (Descr, Pred (AMibIfRow.dwDescrLen));

Move (AMibIfRow.bDescr, Descr[1], pred (AMibIfRow.dwDescrLen));

self.FDescription:=Trim(Descr);

self.FPrevCountIn:=AMibIfRow.dwInOctets;

self.FPrevCountOut:=AMibIfRow.dwOutOctets;

self.FStartedAt:=Now;

self.FSpeed:=AMibIfRow.dwSpeed;

FActiveCountIn:=0;

FActiveCountOut:=0;

FInTotal:=0;

FOutTotal:=0;

FInPerSec:=0;

FOutPerSec:=0;

FPeakInPerSec:=0;

FPeakOutPerSec:=0;

 //notify this instance

if Assigned(OnNewInstance)

then OnNewInstance(self);

end;

procedure TTraffic. NewCycle (const InOctets, OutOctets, TrafficSpeed: Dword);

begin

inc (self.FSecondsActive);

if not Running

then Exit;

FSpeed:=TrafficSpeed;

 // in

self.FInPerSec:=InOctets-self. PrevCountIn;

Inc (self.FInTotal, self. InPerSec);

if InPerSec>0

then Inc(FActiveCountIn);

if InPerSec>PeakInPerSec

then FPeakInPerSec:=InPerSec;

try

if ActiveCountIn<>0

then self.FAverageInPerSec:=InTotal div ActiveCountIn

except

self.FAverageInPerSec:=0;

end;

FPrevCountIn:=InOctets;

 // out

self.FOutPerSec:=OutOctets-self. PrevCountOut;

Inc (self.FOutTotal, self. OutPerSec);

if OutPerSec>0

then Inc(FActiveCountOut);

if OutPerSec>PeakOutPerSec

then FPeakOutPerSec:=OutPerSec;

try

if ActiveCountIn<>0

then self.FAverageOutPerSec:=OutTotal div ActiveCountOut

except

self.FAverageOutPerSec:=0;

end;

FPrevCountOut:=OutOctets;

end;

function TTraffic. GetIPFromIFIndex (InterfaceIndex: Cardinal): string;

var

i: integer;

IPArr: TMIBIPAddrArray;

begin

Result:='Not found!'; // shouldn't happen…

Get_IPAddrTableMIB(IpArr); // get IP-address table

if Length(IPArr)>0

then

for i:=low(IPArr) to High(IPArr) do // look for matching index…

if IPArr[i].dwIndex=InterfaceIndex

then

begin

Result:=IPAddr2Str (IParr[i].dwAddr);

Break;

end;

end;

procedure TTraffic. Reset;

begin

self.FPrevCountIn:=InPerSec;

self.FPrevCountOut:=OutPerSec;

self.FStartedAt:=Now;

FSecondsActive:=0;

FActiveCountIn:=0;

FActiveCountOut:=0;

FInTotal:=0;

FOutTotal:=0;

FInPerSec:=0;

FOutPerSec:=0;

FPeakInPerSec:=0;

FPeakOutPerSec:=0;

end;

procedure TTraffic. Freeze;

begin

FRunning:=false;

if Assigned(FOnFreeze)

then OnFreeze(Self);

end;

procedure TTraffic. UnFreeze;

begin

FRunning:=true;

if Assigned(FOnUnFreeze)

then OnUnFreeze(Self);

end;

procedure TTraffic. MarkDisconnected;

begin

self.FConnected:=false;

self.FRunning:=false;

end;

function TTraffic. GetStatus: string;

begin

if self. Connected

then Result:='Connected'

else Result:='Not connected';

if self. Running

then Result:=Result+', Running'

else Result:=Result+', Not running';

end;

function TTraffic. FriendlyRunningTime: string;

var

H, M, S: string;

ZH, ZM, ZS: integer;

begin

ZH:=SecondsActive div 3600;

ZM:=Integer(SecondsActive) div (60-ZH*60);

ZS:=Integer(SecondsActive) - (ZH*3600+ZM*60);

H:=Format ('%.2d', [ZH]);

M:=Format ('%.2d', [ZM]);

S:=Format ('%.2d', [ZS]);

Result:=H+':'+M+':'+S;

end;

end.

трафик сетевой интерфейс программный

Описание программного обеспечения

Операционная система, сокр. ОС (англ. operating system, OS) - комплекс управляющих и обрабатывающих программ, которые, с одной стороны, выступают как интерфейс между устройствами вычислительной системы и прикладными программами, а с другой стороны - предназначены для управления устройствами, управления вычислительными процессами, эффективного распределения вычислительных ресурсов между вычислительными процессами и организации надёжных вычислений. Это определение применимо к большинству современных операционных систем общего назначения.

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

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

В большинстве вычислительных систем операционная система является основной, наиболее важной (а иногда и единственной) частью системного программного обеспечения. С 1990-х годов наиболее распространёнными операционными системами являются системы семейства Microsoft Windows и системы класса UNIX (особенно Linux и Mac OS).

Функции операционных систем

Основные функции:

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

· Загрузка программ в оперативную память и их выполнение.

· Стандартизованный доступ к периферийным устройствам (устройства ввода-вывода).

· Управление оперативной памятью (распределение между процессами, организация виртуальной памяти).

· Управление доступом к данным на энергонезависимых носителях (таких как жёсткий диск, оптические диски и др.), организованным в той или иной файловой системе.

· Обеспечение пользовательского интерфейса.

· Сохранение информации об ошибках системы.

Дополнительные функции:

· Параллельное или псевдопараллельное выполнение задач (многозадачность).

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

· Разграничение доступа различных процессов к ресурсам.

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

· Взаимодействие между процессами: обмен данными, взаимная синхронизация.

· Защита самой системы, а также пользовательских данных и программ от действий пользователей (злонамеренных или по незнанию) или приложений.

· Многопользовательский режим работы и разграничение прав доступа

Описание языка программирования

Концепция Delphi 1 была реализована в конце 1994 года, когда вышла первая версия среды разработки. В основу этого программного продукта легли концепции объектно-ориентированного программирования (ООП) на базе языка Object Pascal и визуального подхода к построению приложений.

После выхода Delphi 1 все компьютерные издания писали об этой среде, как об «убийце Visual Basic». Появление Delphi 2 (32-разрядной) ознаменовало новую эпоху, - появился доступ к возможностям программных интерфейсов Windows NT и Windows 95. Delphi 2 стала средством разработки полноценных приложений клиент / сервер. Вскоре Delphi 3 предоставила разработчикам средства создания распределенных многоуровневых приложений и полноценный инструментарий проектирования приложений для Internet и Intranet. Появилась полноценная поддержка com - модели объектов, ставшей краеугольным камнем современного программирования. Четвертая версия Delphi позволяет полностью интегрировать ваши разработки с объектами com. Поддержка архитектуры corba (common object request broker architecture) открывает перед приложениями, созданными в delphi для платформы wintel (windows + intel), мир других операционных систем (unix, os/2, wms).

Delphi представляет следующие новые свойства и усовершенствования:

- Новые расширения языка. В Delphi в язык Object Pascal включены динамические массивы, методы обработки переполнения, установка значения параметров по умолчанию, и многое другое;

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

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

- Закрепляемые окна инструментов. IDE (Интегрированная Среда разработки) содержит более перенастраиваемую конфигурацию окон инструментов, которые можно закреплять с редактором кода;

- Улучшенная отладка. Интегрированный отладчик имеет много новых свойств, включая удаленную и многопроцессорную отладку, просмотр кода центрального процессора, инспекторов, усовершенствованные точки прерывания, отладчик специфических подменю и закрепленных окон;

- Усовершенствования Activex;

- Усовершенствования VCL. Иерархия объектов Delphi была расширена, чтобы включить новый компонент для Nt Service приложений. Кроме того, новый компонент выполняемого списка (на Стандартной странице палитры), позволяет централизовать управление меню и команд от кнопок. Управление VCL расширено, чтобы поддерживать drag-and-drop перетаскивания, обеспечивать дополнительный контроль над размещением окна, и многое другое.

Delphi - это комбинация нескольких важнейших технологий:

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

- объектно-ориентированная модель компонент;

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

- масштабируемые средства для построения баз данных.

Компилятор, встроенный в Delphi, обеспечивает высокую производительность, необходимую для построения приложений в архитектуре «клиент-сервер». Он предлагает легкость разработки и быстрое время проверки готового программного блока, характерного для языков четвертого поколения. Кроме того, Delphi обеспечивает быструю разработку без необходимости писать вставки на Си или ручного написания кода (хотя это возможно).

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

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

Объекты БД в Delphi основаны на SQL и включают в себя полную мощь Borland Database Engine. В состав Delphi также включен Borland SQL LINK, поэтому доступ к СУБД Oracle, Sybase, Informix и Interbase происходит с высокой эффективностью. Кроме того, Delphi включает в себя локальный сервер Interbase для того, чтобы можно было разработать расширяемые на любые внешние sql-сервера приложения в офлайновом режиме. Разработчик в среде Delphi, проектирующий информационную систему для локальной машины (к примеру, небольшую систему учета медицинских карточек для одного компьютера), может использовать для хранения информации файлы формата.dbf (как в dbase или clipper) или.db (paradox). Если же он будет использовать локальный interbase for windows (это локальный SQL-сервер, входящий в поставку), то его приложение безо всяких изменений будет работать и в составе большой системы с архитектурой клиент-сервер.

Размещено на Allbest.ru


Подобные документы

  • Постановка задачи и математическое описание ее решения. Назначение программного обеспечения. Описание принятых идентификаторов. Выбор языка программирования и написание программы на входном языке. Методика отладки программы и проведение ее тестирования.

    курсовая работа [96,1 K], добавлен 25.06.2013

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

    контрольная работа [928,3 K], добавлен 23.12.2012

  • Проектирование программного модуля: сбор исходных материалов; описание входных и выходных данных; выбор программного обеспечения. Описание типов данных и реализация интерфейса программы. Тестирование программного модуля и разработка справочной системы.

    курсовая работа [81,7 K], добавлен 18.08.2014

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

    курсовая работа [2,2 M], добавлен 26.04.2015

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

    дипломная работа [1,3 M], добавлен 18.10.2013

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

    лабораторная работа [1,6 M], добавлен 22.12.2015

  • Проектирование модульной структуры программы сетевого мессенджера, назначение модуля "frmMsg". Разработка главной формы и интерфейса пользователя программы. Проектирование модуля формы "About". Разработка методики тестирования и отладка программы.

    курсовая работа [606,7 K], добавлен 19.01.2012

  • База данных как основа автоматизации. Разработка, описание и реализация программного обеспечения "Точность и правильность методов и результатов измерений для центральной заводской лаборатории ОАО "Акрилат". Листинг, исходные коды программы и базы данных.

    дипломная работа [1,0 M], добавлен 23.06.2012

  • Проектирование базы данных, информационной подсистемы PLC-Tester, модуля тестирования и web-приложения. Разработка логической структуры программного продукта и общие требования к техническому обеспечению. Запуск программы и описание тестовых прогонов.

    дипломная работа [3,2 M], добавлен 30.06.2011

  • Характеристика интегральной среды разработки Microsoft Visual Studio NET, ее особенности. Анализ программ "Сетевой чат", программа-клиент. Основные функции программы-сервера, порядок ее запуска. Влияние персонального компьютера на организм человека.

    дипломная работа [1,1 M], добавлен 11.07.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.