Разработка программы
Сетевой трафик как количество переданных данных через сетевой интерфейс за единицу времени. Описание комплекса программ. Проверка разработанной программы на ошибки, проведение ее листинга и тестирования. Описание и конфигурация программного обеспечения.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 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