Alfabet, grundläggande typer och databeskrivning. Objektorienterad programmeringsmetod


Storlek: px

Börja visa från sidan:

Transkript

1 Federal Agency for Railway Transport Ural State Transport University Institutionen för informationsteknologi och informationssäkerhet A. V. Kibardin PROGRAMMERING I C ++ SPRÅK Del 3 Fundamentals of Visual Programming in Borland C ++ Builder Ekaterinburg Publishing House UrGUPS 2012

2 UDC (075.8) K38 K38 Kibardin, A. V. Programmering i C ++. Om 3 timmar, del 3. Grunderna i visuell programmering i Borland C ++ Builder-miljön: studieguide. bidrag / A. V. Kibardin. Jekaterinburg: USUPS förlag, sid. Handledningen är avsedd att lära sig grunderna i visuell design och händelsedriven programmering algoritmiskt språk C ++ i Borland C ++ Bulder-paketmiljön. Riktar sig till studenter i riktningen "Mekatronik och robotik", såväl som studenter, doktorander, studenter vid FPK och förberedande avdelning, som studerar grunderna i modern informationsteknik. UDC (075.8) Publicerad genom beslut av universitetets redaktions- och publiceringsråd fys.-mat. Sciences, USUPS Granskare: GB Smirnov, professor vid institutionen för databehandling, Dr. Tech. Sciences, UrFU im. Rysslands första president B. N. Jeltsin V. I. Radchenko, professor vid Institutionen för informationsteknologi och informationssäkerhet, Dr Phys.-Math. Sci., Ural State Transport University (Ural State Transport University), 2012

3 INNEHÅLL INTRODUKTION ... 4 GRUNDLÄGGANDE ATT PROGRAMMERA I C ++ BUILDERMILJÖN ... 5 ARBETA MED DEN INTEGRERADE APPLIKATIONSUTVECKLINGSMILJÖN .. 9 UTVECKLING AV PROGRAMMETS GRÄNSSNITT. C ++ BYGGARKOMPONENTER UTVECKLING AV APPLIKATIONSPROGRAMKOD. Händelse och hanterare SOBYTIY.17 undantagshantering 20 PROGRAMÄNDRINGAR GRÄNSSNITTAPPLIKATIONER TRÄNINGSANMÄRKNINGAR TILL DISTRIBUTIONEN AV ARBETA MED GRAFIK FIL arbetar med databaser för vissa komponenter för att visa data från en databasfråga till en databas PROGRAMMERINGSKOMPONENT AV REFERENSER

4 INTRODUKTION Den snabba utvecklingen av datorteknik, behovet av effektiva mjukvaruutvecklingsverktyg har lett till uppkomsten på marknaden av program för ett antal programmeringssystem fokuserade på snabb utveckling av applikationer, bland vilka Microsoft Visual Basic och Borland Delphi bör vara noterade. Snabbutvecklingssystem är baserade på teknologin visuell design och händelsedriven programmering, vars essens är att utvecklingsmiljön tar över det mesta av arbetet med att generera programkod, och låter programmeraren designa dialogrutor och skriva funktioner för att hantera händelser. som förekommer i programmet. Det är tydligt att sådana system dramatiskt ökar produktiviteten hos programmeraren. Framgången och populariteten för Delphi utlöste Borlands önskan att utöka den snabba utvecklingsstrategin för professionell programmering, vilket ledde till uppkomsten av Borland C ++ Builder. C ++ Builder är en snabb utvecklingsmiljö där det utökade C ++-språket (C ++ Builder-språket) används som programmeringsspråk. Denna handledning beskriver teknologierna för händelsestyrd och visuell programmering i C++-språket i C++ Builder-miljön. För att arbeta med riktlinjerna behöver du känna till grunderna i programmering i C++-språket och känna till följande teknologier: strukturerad programmering; modulär programmering; objektorienterad programmering (OOP). С ++ Builder är en snabb utvecklingsmiljö där ett stort antal av dessa teknologier ägnas åt dessa teknologier utbildningslitteratur, Inklusive . 4

5 GRUNDLÄGGANDE FÖR PROGRAMMERING I MILJÖN AV C ++ Builder Egenskaper för programmering i Windows-miljön C ++ Builder-systemet är avsett för utveckling av program som fungerar i Windows-miljön. Windows-programmering har följande funktioner: 1) programkod består av procedurer för att bearbeta meddelanden som Windows skickar till applikationen (programmet); 2) Windows fixar händelser som inträffar i program och hårdvara och skickar motsvarande meddelanden till programmet; 3) flera program kan köras samtidigt. Dessa program delar datorresurser sinsemellan; 4) det pågående programmet är i arbetsområdet för minnet och väntar på meddelanden från Windows, som det ska svara på; 5) interaktion med hårdvara sker genom grafiskt gränssnitt enheter. Windows erbjuder en så kallad händelsedriven miljö till programutvecklaren, där programkod exekveras som svar på en specifik händelse. Windows genererar ett inmatningsmeddelande för varje ingångshändelse som genereras av en användare med hjälp av en mus eller ett tangentbord. Windows lagrar indatameddelanden i en kö systemmeddelanden... Dessa meddelanden skickas sedan till programmets meddelandekö. Meddelandet till Windows-applikationen genereras genom att skapa en meddelandepost i meddelandekön. Vissa meddelanden från Windows skickas direkt till applikationsfönstret som så kallade out-of-order meddelanden. En applikation kan också skapa sina egna meddelanden, placera meddelanden i sin egen kö och skicka dem till andra applikationer. Varje applikation körs i sitt eget fönster med en unik deskriptorbeskrivning. Eftersom meddelandeposten anger vem som är avsedd det här meddelandet, sedan vidarebefordrar Windows den till den angivna adressen. Ansökan ska kunna behandla vilket meddelande som helst. För nästan varje händelse har Windows en standardhanteringsprocedur. Bilagan bör ange att när en NM-händelse inträffar, för vilken det inte finns någon speciell kod i programmet, ska standard Windows-proceduren exekveras. De flesta standardprogrammeddelanden hanteras automatiskt eftersom alla C++ Builder-objekt har en inbyggd meddelanderutin. 5

6 Grundläggande begrepp för OOP i C ++ Builder Programmering i C ++ Builder är baserad på det utökade C ++-språket (C ++ Builder-språk). C ++ introducerar en speciell datatypklass. En klass är en datastruktur som består av följande element: fält; metoder; egenskaper. Fält innehåller data av en viss typ. Metoder är funktioner som utför specifika åtgärder. Egenskaper är datafält som påverkar ett objekts beteende. De skiljer sig från vanliga fält genom att tilldela värden till dem innebär att man anropar motsvarande metoder. Språket använder den reserverade ordklassen för att beskriva en klass. Klassen deklareras i applikationsmodulen (se nedan). I C ++ är basklassen för alla klasser den abstrakta TObject-klassen: därför, om du behöver skapa en ny dataklass, måste du använda följande beskrivning: class TNewObject: TObject class body; Vi påminner dig om att när du beskriver en klass, listar dess rubrik alla klasser som är basen för den. Möjligheten att komma åt elementen i dessa klasser regleras med åtkomstnycklarna privat, skyddad och offentlig (se). Ett objekt är en instans av en klass. En instans av en klass implementeras av en variabel av denna typ klass, till exempel: TNewObject * NewObject; Filhantering i C ++ Builder I början av ett projekt ger C ++ Builder en utvecklare ett praktiskt taget färdigt program. Programmet består av ett fönster med titeln Form1 och har samma funktion som ett standard Windows-fönster. Detta skapar följande programfiler. Huvudmodulen i Project1.cpp-projektet innehåller koden för huvudprogrammet skriven i C++. Filen innehåller länkar till alla former av projektet och relaterade moduler. Den innehåller också applikationsinitieringskoden: 6

7 // #inkludera #pragma hdrstop // USEFORM ("Enhet1.cpp", Form1); // WINAPI WinMain (HINSTANCE, HINSTANCE, LPSTR, int) prova Application-> Initialize (); Application-> CreateForm (klassid (tform1), & Form1); Program-> Kör (); catch (Undantag & undantag) Application-> ShowException (& undantag); fånga (...) try throw Undantag (""); catch (Undantag & undantag) Application-> ShowException (& undantag); returnera 0; // Formulärmoduler För varje formulär skapar C ++ Builder en separat modul, som består av två filer: en rubrikfil och en kodfil (innehållet i dessa filer visas i kodredigeringsfönstret). Rubrikfilen Unit1.h innehåller en beskrivning av formuläret och ser ut så här: // #ifndef Unit1H #define Unit1H //

8 #inkludera #omfatta #omfatta #omfatta // klass TForm1: offentlig TForm publicerad: // IDE-hanterade komponenter privata: // Användardeklarationer offentliga: // Användardeklarationer fastcall TForm1 (TComponent * Ägare); ; // extern PAKET TForm1 * Form1; // #endif Kodfilen (formulärmodul) Unit1.cpp innehåller beskrivningen av funktioner, inklusive händelsehantering: // #include #pragma hdrstop #include "Unit1.h" // #pragma package (smart_init) #pragma resource "* .dfm" TForm1 * Form1; // fastcall TForm1 :: TForm1 (TComponent * Ägare): TForm (Ägare) // Dessutom genererar C ++ Builder, som analyserar programmerarens åtgärder, en beskrivningsfil för formuläregenskaper (formulär, om det finns mer än ett formulär i projektet) som en komponent av standardbibliotekets visuella komponenter Unit1.dfm, projektfil Project1.bpr och projektresursfil. Resultatet av att sammanställa projektet ( körbar applikation) sparas i filen Project1.exe. Filer med tilläggen .tds och .obj skapas av kompilatorn under genereringen av den körbara filen. Säkerhetskopieringar projektfiler har "~" (*. ~ *) som det första tilläggstecknet. åtta

9 ARBETA MED DEN INTEGRERADE APPLIKATIONSUTVECKLINGSMILJÖN C ++ Builder är baserad på Integrated Application Development Environment (IDE). Efter att ha startat C ++ Builder kommer flera fönster att visas på skärmen, som visas i Fig. 1. IDE består av huvudfönstret, objektinspektören, den visuella formdesignern, programredigerarens fönster, som inkluderar klassvisaren och programkällredigeraren. Huvudfönstret innehåller huvudmenyn och flera verktygsfält: standard-, formulär- och källtextvisningspanel, felsökningspanel, valpanel för miljöinställningar, anpassad samt en palett med komponenter. Komponentpaletten innehåller 19 paneler. Inom en enda panel kombineras applikationsspecifika komponenter. Varje komponent representeras i paletten av sin egen ikon. Visuell formdesigner Ett formulär är ett framtida Windows-fönster som innehåller olika kontroller (knappar, menyer, etiketter, växlar, etc.). När det skapade programmet kompileras och startas för exekvering, förvandlas formuläret till ett vanligt Windows-fönster och utför de åtgärder som definieras för det av utvecklaren. Det kan finnas flera sådana fönster i programmet, men bara ett av dem anses vara det viktigaste, resten är extra. Formulärkomponenter Palettkomponenter innehåller generaliserade bilder av kontroller och har motsvarande namn ("knapp", "rullningslist" etc.). Efter att ha placerat en komponent i ett formulär innehåller den faktiskt en instans av motsvarande komponent, det vill säga ett objekt. Objektinspektören Objektinspektören är utformad för att ställa in egenskaper för objekt och bestämma deras reaktioner på olika händelser. Det aktuella objektet visas överst i inspektören i en rullgardinslista. Objektinspektören innehåller två sidor: Egenskaper och Händelser. För att ändra en specifik egenskap, välj ett objekt i formuläret, klicka på sidan Egenskaper, klicka sedan på raden för motsvarande egenskap och ställ in dess nya värde i fönstret som öppnas. På sidan "Händelser" för inspektören kan du definiera programmets reaktion på olika händelser i form av motsvarande funktioner. 9

10 Huvudfönster Verktygsfält Inspector Viewer Visual Editor klassobjekt designer av källkodsformer Fig. 1. Huvudfönstret för applikationsutvecklingsmiljön Programredigerare Bredvid huvudformulärfönstret finns programredigeringsfönstret. Växling mellan formuläret och kodredigeraren kan göras antingen med musen eller med funktionstangenten "F12". Redaktörsfönstret består av två paneler: klassvisaren och programkällredigeraren. Klassvisaren visar visuellt strukturen för kopplingar mellan olika objekt i programmet och låter dig snabbt navigera genom dess text. Programkoden visas i programmets källredigeringsfönster. Intuitiv kodningshjälp Kodredigeraren har en uppsättning verktyg som tillhandahåller en mängd olika hjälpfunktioner. Dessa verktyg kallas gemensamt för intuitiv kodningshjälp. Den utför följande funktioner: kodkomplettering; 10

11 kontextuell lista över parametrar; snabb bedömning av värden; verktygstips för identifieringsdeklarationer; kodmallar. Projektledare Förutom huvudformuläret och modulen med källkoden till detta formulär innehåller programmet en projektfil med vilken du kan hantera filer (moduler) som ingår i projektet. Managerfönstret anropas av kommandot Visa / Projektledare. Projektledaren låter dig utföra operationer med filer. Åtgärder med filer utförs med hjälp av projektledarens verktygsfält. elva

12 UTVECKLING AV APPLIKATIONSGRÄNSSNITTET. C ++ BUILDER-KOMPONENTER Att utveckla Windows-applikationer med C ++ Builder är mycket enkelt eftersom utvecklaren har ett omfattande objektbibliotek (VCL). Detta bibliotek är strukturerat på ett hierarkiskt sätt och är baserat på TObject-klassen. Det är en abstrakt typ, definierad i Classes-enheten. Det är alla objekts förfader: alla objekt härrör från det och har egenskaper som ärvts från TObject. C ++ Builder-objekthierarkin visas i följande diagram. Objekt Icke-visuellt Visuellt Icke-kontrollkontroll Fönster Icke fönster C ++ Builder-komponenter är en speciell typ av objekt. Komponenter, tillsammans med metoder och händelsehanterare, har egenskaper. Egenskaper har fördefinierade värden som kan ändras både under programkörning och under utveckling. Skillnaden mellan komponenter och objekt är att komponenter är visuella objekt; de kan redigeras under programutveckling, men icke-visuella objekt kan inte. Till exempel är en RadioButton ett visuellt objekt som representeras grafiskt i komponentpaletten. Kontroller är en speciell typ av komponenter. Komponenter som inte fungerar som kontroller är osynliga för användaren; han kan inte göra något med dem. Till exempel är "meny"-komponenten synlig och tillgänglig endast för applikationsutvecklaren. När du arbetar med applikationen kan användaren inte göra någonting med "meny"-komponenten. Han ser bara resultatet av programmerarens arbete med denna komponent, nämligen menyn där du kan välja något. Tvärtom, en knapp är ett grafiskt element, synlig användare... Användaren kan utföra någon åtgärd, till exempel genom att klicka på den här knappen. Inom kategorin kontroller finns det en distinktion mellan fönsterkontroller och icke-fönsterkontroller. Fönsterkontroller är kontroller som: kan bli aktiva; kan innehålla andra kontroller; 12

13 har ett fönsterhandtag. Kontroller utan fönster är de som: inte kan bli aktiva; kan inte innehålla andra kontroller; har inget fönsterhandtag. Låt oss skapa en applikation som kan beräkna rötterna till en andragradsekvation. Låt oss börja med att utveckla programmets användargränssnitt. Starta programmeringssystemet C ++ Builder och spara omedelbart projektfilen och modulfilen med hjälp av menykommandot Arkiv. Eftersom systemet skapar många arbetsfiler för ditt projekt bör du spara dem i en separat mapp. Observera att du redan har ett fungerande program som visar ett tomt fönster. Med det här fönstret kan du utföra det vanliga för fönster Windows-åtgärder... Verifiera detta genom att köra programmet med menykommandot Kör/Kör. I programmet måste användaren ange koefficienterna för ekvationerna a, b och c. För att ange dessa data använder vi komponenten Redigera (inmatningsfält). Komponenten placeras på fliken Standart i komponentpaletten. Klicka på knappen Redigera komponent, flytta sedan muspekaren över formuläret och klicka på önskad plats. Som ett resultat av dessa åtgärder kommer ett inmatningsfält med inskriptionen inuti Edit1 att visas på formuläret. I det här fallet kommer själva inmatningsfältet att få namnet Edit1, under vilket det kommer att vara tillgängligt för programmet. Objektnamn skapas i C ++ Builder automatiskt enligt följande princip: namnet på komponenten plus ordningsnumret på kontrollen placerad på formuläret. Formuläret med alla kontroller visas i fig. 2.!!! Det är upp till programmeraren att ge kontrollerna sina egna namn, men detta bör endast göras genom objektinspektören och inte i kodredigeraren. För att göra detta, välj egenskapen Name för det nödvändiga elementet i objektinspektören och ange ett nytt namn. Låt oss ta bort innehållet i inmatningsfältet från inskriptionen. För att göra detta, välj inmatningsfältet på formuläret genom att klicka på det med muspekaren, på sidan "Egenskaper" för objektinspektören, välj Textegenskap inmatningsfält och i den intilliggande cellen radera inskriptionen Redigera1. Låt oss placera en inskription ovanför inmatningsfältet och förklara att detta inmatningsfält är avsett för att mata in koefficienten a. Låt oss använda Label-komponenten. Den här komponenten finns på fliken "Standart". Använd Caption-egenskapen för den här kontrollen för att ställa in bildtexten. Placera inmatningsfälten för koefficienterna b och c på formuläret på samma sätt och skriv lämpliga etiketter ovanför dem. Beräkningsresultaten, det vill säga värdena för de beräknade rötterna x1 och x2, kan visas på formuläret med de komponenter du redan känner till Redigera och 13

14 Etikett. Placera ytterligare två redigeringselement på formuläret och motsvarande bildtexter ovanför dem. Ris. 2. Vy över projektfönstret Låt oss placera två knappar på formuläret: en för att starta beräkningsprocessen, den andra för att stänga programmet. Låt oss använda Button-komponenten. Knappkomponenten finns också på fliken "Standart". Låt oss sätta etiketter på knapparna: "Beräkna" och "Stäng". För att göra detta, använd Caption-egenskaperna för motsvarande knappar. Låt oss placera sådana viktiga gränssnittselement som menyraden, verktygsfältet och statusfältet i formuläret. Gå till fliken "Win32" i komponentpanelen och klicka på ikonen i verktygsfältet, klicka sedan på formuläret med muspekaren. Ett verktygsfält visas högst upp i formuläret, utan några knappar ännu. För att skapa verktygsfältsknapparna använder vi SpeedButton-komponenten som finns på fliken Ytterligare. Placera tre knappar på verktygsfältet som motsvarar kommandona Beräkna, Hjälp och Avsluta. Markera önskad knapp och använd egenskapen Glyph. Klicka sedan på rektangeln med tre punkter i egenskapsraden. Som ett resultat kommer redigeringsdialogrutan 14 att visas.

15 bilder. I det här fönstret klickar du på knappen "Ladda"; hitta underkatalogen Program Files \ Common Files \ Borland Shared \ Images \ Buttons och i listan med föreslagna filer välj lämplig ritning... Klicka på knappen "OK" i redigeringsfönstret. Gå tillbaka till Win32-fliken och markera StatusBar-ikonen. Klicka på formen. En statusrad visas längst ned i formuläret. Gå till fliken "Standart" i komponentpaletten och välj ikonen MainMenu (huvudmeny). Klicka var som helst på formuläret. MainMenu-komponenten är icke-visuell, så den kan placeras var som helst på formuläret. Dubbelklicka på menyalternativet, menyredigeraren visas på skärmen. För att kunna använda den för att lägga till nya menyalternativ måste du utföra följande steg: 1) tryck på "Enter"-tangenten, objektinspektören aktiveras, som kommer att erbjuda dig att ange ett namn för det aktuella menyalternativet på bildtextraden; 2) skriv in ordet "Ekvation" och tryck på "Enter". Systemet växlar tillbaka till menyredigeraren. Tryck på Enter och skriv ordet Beräkna i objektinspektören. Upprepa dessa steg två gånger till för att lägga till "Hjälp" och "Avsluta" underobjekt till menyn. För att slutföra utvecklingen av programgränssnittet återstår det att lägga till ytterligare ett formulär med nödvändiga kontroller. Det andra formuläret kommer att vara programmets hjälpfönster. Använd menykommandot Arkiv / Nytt / Form för att lägga till ett andra formulär till projektet. Korrigera formulärets titel genom att ge det namnet "Hjälp". Placera Memo1-objektet på formuläret med hjälp av Memo-komponenten (flerradsinmatningsfält) på fliken "Standart". Denna komponent låter dig visa text som består av många rader. Ge formuläret och fältet Memo1 lämpliga dimensioner. För att göra detta, välj önskat objekt längs kanterna på objektet, svarta rutor kommer att visas. Genom att ta tag i en av rutorna med muspekaren kan du ändra storleken på objektet. Placera knappen som stänger hjälpfönstret direkt under inmatningsfältet. För att göra detta, använd BitBtn-komponenten på fliken "Additiona" l. Välj värdet bkclose i egenskapen Kind. Detta fördefinierade värde stänger det här fönstret. Det återstår att placera hjälptexten i inmatningsfältet. Välj Lines-egenskapen för inmatningsfältet och dubbelklicka sedan på knappen med tre punkter på raden för denna egenskap. Detta kommer att få upp ett textredigeringsfönster där du ska ta bort fältnamnet och skriva in hjälptexten, till exempel följande: 15

16 Detta program beräknar rötterna till en andragradsekvation. Ange värdena för ekvationskoefficienterna i lämpliga fönster och klicka på knappen "Beräkna". Tryck på "Avsluta"-knappen för att slutföra arbetet. När du har skrivit in hjälptexten klickar du på OK. Spara modulen i det andra formuläret. Detta avslutar utvecklingen av gränssnittet. sexton

17 UTVECKLING AV APPLIKATIONSPROGRAMKOD. HÄNDELSER OCH HÄNDELSHANTERARE Applikationer byggda med C ++ Builder är Windows-applikationer. En av huvuddragen i sådana applikationer är händelsestyrd kontroll. Detta innebär att programmet exekveras baserat på de genererade händelsemeddelandena, som bearbetas av applikationskoden. Sådan kod måste skrivas för varje händelse som programmet måste svara på. En procedur utformad för att svara på en händelse kallas en händelsehanteringsfunktion i C ++ Builder. Det finns två kategorier av händelser: användargenererade händelser, anpassade händelser och vanliga programdrivna händelser. Anpassade händelsehanteringsfunktioner är huvuddelen av din applikationskod. De ger interaktiv interaktion mellan applikationen och användaren. C ++ Builder använder fördefinierade händelsehanterare för detta, som kan användas av nästan alla komponenter. Detta inkluderar hanterare för mus- och tangentbordshändelser. Regelbundna (programvarukontrollerade) händelser inkluderar aktivering, slutförande, tillståndsändringshändelser för enskilda komponenter och andra händelser som är ett indirekt resultat av användaråtgärder. C ++ Builder genererar funktioner för att hantera varje händelse och namnger dem enligt namnen på de komponenter som dessa procedurer är avsedda för. Om du till exempel dubbelklickar på Button1 kommer en tom händelsehanteringsfunktion att genereras i formulärmodulen, som ser ut så här: void fastcall TForm1 :: Button1Click (TObject * Avsändare) Därefter måste du ange önskad programkod in i det sammansatta blocket. Välj knappen Beräkna, gå till sidan Händelser i objektinspektören och dubbelklicka på namnet på OnClick-händelsehanteraren. Systemet kommer att lägga till en tom knappklickshanteringsfunktion till modultexten. Vad ska denna funktion utföra? Först bör den läsa innehållet i inmatningsfälten för koefficienterna a, b och c; vidare bör de lästa värdena omvandlas till siffror, eftersom egenskapen Text för komponenten Redigera är av en strängtyp; sedan måste nödvändiga beräkningar utföras och resultatet placeras i fälten Edit4 och Edit5. 17

18 Lägg till följande kod till funktionen. void fastcall TForm1 :: Button1Click (TObject * Avsändare) flyta a, b, c, d, x1, x2; a = strtofloat (redigera1-> text); b = strtofloat (redigera2-> text); c = strtofloat (redigera3-> text); d = b * b-4 * a * c; om (d> = 0) annars x1 = (- b-sqrt (d)) / (2 * a); x2 = (- b + sqrt (d)) / (2 * a); Edit4-> Text = FloatToStr (x1); Edit5-> Text = FloatToStr (x2); ShowMessage ("Inga giltiga rötter"); Lägg till #include-raden i sektionen för förbearbetningsdirektiv i formulärmodulen Denna rubrikfil låter dig använda ett bibliotek med matematiska funktioner (i vårt fall funktionen för att beräkna kvadratroten). Notera följande punkter i texten. För beräkningar använde vi endast lokala variabler, eftersom de inte behöver användas i andra procedurer. För att konvertera en teckensträng till ett tal och omvänd konvertering, använd StrToFloat () respektive FloatToStr () funktioner. För att visa meddelandet "Inga giltiga rötter", använd Windows-funktionen för att anropa dialogrutan ShowMessage-fönster(). Låt oss definiera funktionen för att bearbeta ett klick på knappen "Avsluta". Dubbelklicka på den här knappen och lägg till rad 18 till Button2Click-funktionen i kodredigerarens visade fönster

19 Form1-> Stäng (); (Stäng () metod som stänger fönstret för vår applikation.) Spara projektet och kör det. Kontrollera dess arbete med olika initiala data. Om systemet upptäcker fel, åtgärda dem och kör projektet igen. Låt oss nu definiera händelserna i menyn och trycka på knapparna i verktygsfältet. Vi behöver inte skriva någon kod för detta. Vi kommer att länka de önskade händelserna till de redan definierade händelserna genom att klicka på knapparna "Beräkna" och "Avsluta". Klicka på menyraden och välj sedan det första menyalternativet "Beräkna". I objektinspektören på sidan Händelser, på raden On-Click-hanterare, i listan över tillgängliga funktioner, välj Button1Click-funktionen. Klicka på formuläret och gör samma sak med menyalternativet "Avsluta", först nu koppla det med Button2Click-funktionen. Välj menyalternativet "Hjälp", i objektinspektören, dubbelklicka på raden i OnCliсk-hanteraren, i kodredigeraren, lägg till kommandot Form2-> ShowModal () till N3Click-funktionen; I avsnittet av moduldirektiven i huvudformuläret, glöm inte att lägga till direktivet för att inkludera rubrikfilen för hjälpmodulen #inkludera "hjälpmodulnamn.h". Här är help_module_name namnet med vilket du sparade modulen på disken. Metoden ShowModal () anropar hjälpfönstret, och tills det stängs kommer det inte att vara möjligt att gå till huvudprogramfönstret (fönstrets modala tillstånd). Välj knappen "Beräkna" i verktygsfältet och i objektinspektören för OnClick-hanteraren välj Button1Click-funktionen; för Exit-knappen, Button2Click-funktionen. För knappen Hjälp, skapa en procedur som hanterar klicket på samma sätt som du gjorde för menyalternativet Hjälp. Det återstår att avgöra hur statusfältet StatusBar1 fungerar. Välj den i formuläret, gå till sidan Egenskaper för objektinspektören, hitta egenskapen SimplePanel och ställ in den på sant. Dubbelklicka på formuläret och lägg in följande kod i kroppen av FormCreate-funktionen: void fastcall TForm1 :: FormCreate (TObject * Avsändare) StatusBar1-> SimpleText = "Ange koefficienterna för ekvationen"; Spara projektet och testa applikationen. nitton

20 BEHANDLING AV EXCEPTIONELLA SITUATIONER I PROGRAMMET I det utvecklade programmet tog vi inte hänsyn till eventuella datainmatningsfel. Först kan användaren ange en teckensekvens som inte är ett nummer. För det andra kan användaren ange värdet på koefficienten a = 0, vilket kommer att leda till ett försök att dividera med noll i operatorerna som beräknar rötterna till ekvationen. Båda situationerna kallas exceptionella. Exempel på andra undantag är overflow, ett försök att öppna en obefintlig fil etc. För att kontrollera sådana situationer har C++ Builder-systemet en så kallad undantagshanteringsmekanism. När en exceptionell situation inträffar genererar programmet ett så kallat undantag och utförandet av ytterligare beräkningar i detta block avslutas. Ett undantag är ett föremål av särskild typ som kännetecknar en exceptionell situation som har uppstått i programmet. Det speciella med undantag är att de är rent tillfälliga föremål. Så snart de behandlas av någon hanterare förstörs de. Om undantaget inte fångas någonstans i programmet, hanteras det av standardmetoden Tapplication.HandleException. Denna metod ger användaren en sammanfattning av informationen i meddelandefönstret och förstörelsen av undantagsinstansen. Det mest radikala sättet att hantera undantag är att hantera dem med logiska försök och fånga block: försök // uttalanden som kan orsaka ett undantag // catch (Type & e) // kommandon som hanterar detta undantag Här Typ är typen (klass) undantaget... C ++ Builder definierar ett antal undantagsklasser. Låt oss överväga två av dem som behövs i vårt program: klassen EConvertError, associerad med ett fel vid konvertering av strängar eller objekt (särskilt i StrToFloat-funktionen), klassen EZeroDivdide, associerad med ett försök att dividera med noll en flyttal siffra. tjugo

21 Ändra texten i Button1Click-funktionen enligt texten nedan. void fastcall TForm1 :: Button1Click (TObject * Avsändare) flyta a, b, c, d, x1, x2; prova a = strtofloat (edit1-> text); b = strtofloat (redigera2-> text); c = strtofloat (redigera3-> text); catch (econverterror & e) ShowMessage ("Felaktiga data!"); lämna tillbaka; d = b * b-4 * a * c; om (d> = 0) försök x1 = (- b-sqrt (d)) / (2 * a); x2 = (- b + sqrt (d)) / (2 * a); catch (ezerodivide & e) ShowMessage ("Koefficienten a kan inte vara lika med noll!"); lämna tillbaka; Edit4-> Text = FloatToStr (x1); 21

22 Redigera5-> Text = FloatToStr (x2); else ShowMessage ("Inga giltiga rötter"); Spara ändringar i modulens text och kontrollera att det inte finns några fel. !!! Om du kör projektet och anger felaktiga data, kommer debuggern att fånga undantaget och programmet avbryts. Klicka på knappen Kör igen så ser du undantagshanteraren som du definierade på jobbet. Men efter att du har avslutat projektet kommer undantag att hanteras enligt din programkod. 22

23 FÖRFINA APPLIKATIONENS GRÄNSSNITT Vi kommer att förbättra gränssnittet för vårt program. Låt oss först få verktygstips att visas för verktygsfältsknappar. Välj "Beräkna"-knappen i verktygsfältet och i objektinspektören ställ in dess Hint-egenskap till "Calculate" och dess ShowHint-egenskap till true. Gör samma sak för resten av knapparna. Spara dina ändringar i projektet. Nu ska vi göra det möjlig användning"Snabbtangenter" när du arbetar med menyn. Det finns två sätt att ställa in snabbtangenter: 1) ange en snabbbokstav i titeln på ett menyalternativ. För att göra detta, klicka på menykomponenten och i objektgranskaren, i varje menyalternativs rubrik framför den önskade bokstaven, sätt &-ikonen, till exempel: & Beräkna "Hot" bokstäver kommer att vara understrukna; 2) välj genvägsegenskapen för detta menyalternativ och välj önskad Ctrl + bokstavskombination från rullgardinsmenyn. Ställ in kortkommandon för menyalternativ och spara dina ändringar i projektet. Det sista som återstår för oss att göra är att ställa in sekvensen av övergångar mellan kontroller när du trycker på TAB-tangenten. Detta är standardpraxis för Windows. Välj alla kontroller i formuläret och välj Tab Order från snabbmenyn. Använd pilknapparna för att ordna om listan med objekt i följande ordning: Redigera1, Redigera2, Redigera3, Knapp1 och klicka på OK. Spara dina ändringar i projektet. Efter att ha startat programmet blir inmatningsfältet Edit1 aktivt. Genom att trycka på "TAB"-tangenten kan du sekventiellt kringgå resten av inmatningsfälten. !!! Navigera in kontrollerna baksidan genom att trycka på SHIFT- och TAB-tangenterna samtidigt. 23

24 FÖRBEREDA BILAGAN FÖR DISTRIBUTION Vi har slutfört utvecklingen av projektet och det återstår att förbereda det för distribution. Låt oss få programfönstret att alltid visas i mitten av skärmen. Ställ in egenskapen Position för huvudformuläret till poscreencenter. Låt oss välja en ikon för programmet (hittills har vi använt standardikon C ++ Builder). Ikonen ändras enligt följande: ange kommandot Projekt / Alternativ; välj fliken Application; klicka på knappen Ladda ikonen; Använd dialogrutan för öppna fil och välj den förberedda ikonfilen (den måste ha filtillägget .ico). En stor uppsättning fördefinierade ikoner finns i C ++ Builders standardbibliotek i underkatalogen \ Images \ Icons. Välj önskad bild och klicka på knappen "Öppna"; i rubrikraden, skriv in titeln "Quadratic Equation"; klicka på knappen "OK". Ett program skrivet i C++ Builder använder en DLL-version av runtime library (RTL) och speciella dynamiska länkbibliotekspaket. För att programmet ska fungera på en annan dator måste du överföra biblioteket till den här datorn på samma plats som exe-filen för detta program, eller inkludera biblioteket och paketen i exe-filen. För att göra det senare, gör följande: 1) Ange kommandot Projekt / Alternativ och välj fliken "Paket", avmarkera rutan "Bygg med körtidspaket"; 2) välj fliken "Länkare" och avmarkera kryssrutan "Använd dynamisk RTL". Nu måste du kompilera om projektet. Kör kommandot Project Your_Project_Name / Build. Nu har projektkatalogen dykt upp körbar fil ditt projekt (fil med filtillägget .exe) med de länkade biblioteken. 24

25 ARBETA MED GRAFIK Du kan rita i programmet direkt på formulärets yta, eller genom att välja specialområden på formuläret för ritning, detta görs med hjälp av komponenterna Image och PaintBox. Formuläret och de angivna komponenterna har en Canvas-egenskap som gör att grafik kan visas. Till exempel uttalandet Form1-> Canvas-> Rectangle (20, 20, 60, 60); ritar en rektangel på formens yta. Följande tabell listar Canvas-egenskapsmetoderna för att rita grundläggande grafikprimitiver. Tabell 1 Metoder för att rita grafiska primitiver Metod MoveTo (x, y) LineTo (x1, y1) Polyline (punkter, n) Rektangel (x1, y1, x2, y2) y2) y2) FillRect (x1, y1, x2, Ellips ( x1 , y1, x2, Arc (x1, y1, x2, y2, x3, y3, x4, y4) Pie (x1, y1, x2, y2, x3, y3, x4, y4) TextOutA (x, y, text) Åtgärd Flyttar markören till positionen med givna koordinater(koordinaterna räknas från det övre vänstra hörnet av formuläret eller ritytan) Ritar en rät linje från den aktuella positionen till punkten med koordinater (x1, y1) Ritar en polylinje; punkters array av böjningspunkter för linjen (se exempel nedan), n antal linjenoder Ritar en rektangel, x1, y1, x2, y2 koordinater för rektangelns övre vänstra respektive nedre högra hörn. Ritar en fylld rektangel Ritar en ellips. X1, y1, x2, y2 anger koordinaterna för rektangeln som ellipsen passar in i. 1 2 Ritar en båge. Parametrarna x1, y1, x2, y2 definierar ellipsen som bågen är en del av, x3, y3, x4, y4 definierar start- och slutpunkten för bågen Ritar en sektor av en ellips eller cirkel. Sektorn skärs moturs från punkt (x3, y3) till punkt (x4, y4) Matar ut texten som specificeras av den tredje parametern. Parametrarna x, y definierar startpunkten från vilken utgången startar 25

26 För att visa enskilda punkter, använd egenskapen Pixels [x] [y] för egenskapen Canvas. Till exempel visar följande operator en röd prick på formuläret med koordinater (50, 50): Form1-> Canvas-> Pilxels = clRed; Här är clred en namngiven konstant som motsvarar röd. För att måla en punkt i en godtycklig färg, använd funktionen RGB (röd, grön, blå), där parametrarna röd, grön, blå anger proportionerna av rött, grönt och blått i sammansättningen av denna färg och kan ta värden i intervallet (0, 255), till exempel: Form1-> Canvas-> Pilxels = RGB (0, 163, 78); Ovanstående metoder ger endast ritning av grafiska primitiver. Utseendet på det grafiska föremålet bestäms av egenskaperna Penna (Penna) och Pensel (Brush) på ytan (Canvas) som den är ritad på givet element... "Penna" och "pensel", som är egenskaper för Canvas-objektet, är i sin tur objekt. Egenskaperna för objekten Penna och Pensel beskrivs i följande tabeller. Tabell 2 Egenskaper Color Width Style Egenskaper för Pen-objektet Bestämmer linjefärgen Linjebredd (i pixlar) Linjestil. psfast fast; psclear-linjen visas inte; psdash streckade med långa drag; psdot streckad med korta drag; psdashdot alternerande långa och korta drag Tabell 3 Egenskaper för Brush-objektet Egenskapen bestämmer Färg Färg fylla det inneslutna området Stil Fyllningsstilen för området. bssolid fast fyllning; bhorisontal horisontell skuggning; bvertikal vertikal skuggning; bsf diagonala diagonala luckor lutade framåt; bsbdiagonal diagonal lucka snett bakåt; bscross i en bur; bsdiag- Cross diagonal square. Egenskapen Font för duken låter dig ändra teckensnittsparametrarna. Följande tabell beskriver egenskaperna för Font-objektet. 26

27 Egenskapsnamn Storlek Stil Färg Tabell 4 Objektegenskaper Font Bestämmer typsnittet som ska användas. Värdet på egenskapen teckensnittsnamn, till exempel Arial Size i poäng Teckensnittsstilen. Definieras av följande konstanter: fsbold fet; fsitalisk kursiv; fsunderlinjen är understruken; fsstrikeout Genomstruken karaktärsfärg. Den ställs in med hjälp av namngivna konstanter, till exempel clred, eller med funktionen RGB () Exempel 1. Visar en röd punkt och en rak svart linje i PaintBox-ritytan när knappen trycks ned. Starta ett nytt projekt. Placera en PaintBox-komponent (fliken Win32) och en knappknapp på projektformuläret. För funktionen för hantering av knappklick, skriv följande kod: void fastcall TForm1 :: Button1Click (TObject * Avsändare) PaintBox1-> Canvas-> Pixels = clRed; PaintBox1-> Canvas-> MoveTo (50,50); PaintBox1-> Canvas-> LineTo (100 100); Exempel 2. Rita en streckad cirkel direkt på ytan av en form. Vi använder OnPaint-händelsehanteraren (omritning) av formuläret. För att hantera OnPaint-händelsen, skriv följande kod: void fastcall TForm1 :: FormPaint (TObject * Avsändare) Form1-> Canvas-> Ellipse (40,40,140,140); Exempel 3. Använda penna och penselobjekt. Placera en annan knapp på formuläret. Skriv följande kod för att hantera knappklicket: 27

28 void fastcall TForm1 :: Button2Click (TObject * Avsändare) Form1-> Canvas-> Pensel-> Färg = clRed; Form1-> Canvas-> Pensel-> Stil = bsCross; Form1-> Canvas-> Penna-> Bredd = 3; Form1-> Canvas-> Ellips (40,40,140,140); Exempel 4. Arbeta med ett teckensnitt Använd OnPaint-händelsehanteraren för att skapa formulär. Lägg till textutdatakoden till funktionen för hantering av formuläromritning av händelser: void fastcall TForm1 :: FormPaint (TObject * Sender) Builder "); Form1-> Canvas-> Ellipse (40,40,140,140); Form1-> Canvas-> Font-> Namn = "Times New Roman"; Form1-> Canvas-> Font-> Storlek = 20; Form1-> Canvas-> Font-> Color = clBlue; Form1-> Canvas-> TextOutA (100, 5, "Exempel på att arbeta med grafik i C ++ Spara projektet och kontrollera dess arbete Uppgift Skriv ett program som visar grafen för funktionen y (x) = sin (x) ex / 5 i ett användarspecificerat intervall och med ett specificerat steg i x. TStringGrid-komponent (tabell) Denna komponent låter dig visa data på formuläret i form av en tabell. Finns på sidan "Ytterligare" Egenskaper Celler Denna egenskap är en uppsättning strängar som innehåller textrader i tabellen. Acol, Arow parametrar anger tabellens kolumnnummer respektive radnummer Den första raden och den första kolumnen är numrerade noll Om ett numeriskt värde måste skrivas i en tabellcell måste det konverteras med funktionen th IntToStr () eller FloatToStr (). 28

29 Exempel float x = 2,4; StringGrid1-> Cells = "Argumentvärde"; StringGrid1-> Cells = "Funktionsvärde"; StringGrid1-> Cells = FloatToStr (x); StringGrid1-> Cells = FloatToStr (x * x); Kolumner Detta är en array som innehåller raderna för varje kolumn i tabellen. Antalet rader är lika med värdet på RowCount-egenskapen. ColCount Bestämmer antalet kolumner i tabellen. Standard är fem. RowCount Bestämmer antalet rader i tabellen. Standard är fem. Kol Indikerar kolumnen för den för närvarande aktiva cellen. Rad Indikerar raden för den aktuella cellen. DefaultColWidth DefaultRowHeight Bestäm bredden på alla kolumner respektive höjden på alla rader i tabellen. Använd egenskaperna RowHeights och ColWidths för att ändra höjden på enskilda rader och bredden på enskilda kolumner. ColWidths RowHeights Låter dig ändra bredden på kolumnen respektive höjden på raden med indexnumret. DefaultDrawing Anger om tabellceller ritas automatiskt (true). EditorMode Bestämmer om den aktuella cellen i tabellen kan ritas. Om uppsättningen egenskaper Alternativ (se tabellen nedan) innehåller värdet goediting, växlar tabellen automatiskt till redigeringsläge. Samma sak händer när du ställer in egenskapen EditorMode på true. Medan Options-värdena vanligtvis ställs in vid applikationsutvecklingstid, kan EditorMode-egenskapen ändras under körning. När egenskapen EditorMode = true är tabellen i redigeringsläge om Options-uppsättningen innehåller ett element. Annars kan celler inte redigeras. 29

30 Om egenskapen EditorMode är falsk och Options-uppsättningen innehåller ett goditing-element men inte en goalwaysshoweditor, kan användaren byta till redigeringsläge genom att trycka på "F2"-tangenten. Alternativ Den här egenskapen definierar tabellens utseende och funktionella egenskaper. Tabell 5 Vissa värden av Options-egenskapen Värdeinställning Åtgärd govertline true Visar vertikala linjer mellan kolumner gohorzline true Visar horisontella linjer mellan rader gorangeselect true Användaren kan välja ett block med celler. Men om goditing anges är detta inte möjligt godrawfocus- Vald false Den aktiva cellen har en annan färg än de andra. Färgen ställs in i egenskapen Färg. Om egenskapen är true, har den aktiva cellen samma färg gorowsizing true Individuella rader kan ändras storlek vid körning gocolsizing true Individuella kolumner kan ändras storlek vid körning goediting true Användaren kan redigera innehållet i cellen. Det går inte att välja blockera GoTabs sant. Du kan navigera genom cellerna med +-tangenterna. gothumbtracking goalwaysshoweditor true true Tabellen växlar automatiskt till redigeringsläge (förutsatt att Options-uppsättningen innehåller ett goediting-element) Den synliga delen av tabellen rullas synkront tillsammans med skjutreglagets rörelse på rullningslisten i bordet 30

31 FixedColor Bestämmer färgen på fasta kolumner och tabellrader. FixedCols Bestämmer antalet fasta kolumner i tabellen (en som standard). Fasta kolumner förblir synliga medan användaren rullar igenom resten av kolumnerna. FixedRows Bestämmer antalet fasta rader i tabellen (en som standard). Komponent TChart (diagram) Komponenten är avsedd för att arbeta med diagram av komplexa typer. Komponentegenskaper ställs in i redigeringsfönstret för "Redigeringsdiagram". Redaktören kallas dubbelklicka av diagramkomponenten (fig. 3). Ris. 3. Fönster i diagramredigeraren Egenskaper Series Representerar en array av diagram (dataserier) som visas i området för diagramkomponenten, där Index anger numret på dataserien. Indexet räknas från noll. För varje diagram placerat i diagramområdet kan du ställa in följande parametrar: en typ; titel; axlar; 31

32 legender; datakälla. Diagramtypen ställs in på sidan Series i diagramegenskapersredigeraren. Om bildandet av diagramvärdena utförs under körningen av applikationen, är det för datakällan nödvändigt att välja parametern No Data på sidan "Series-DataSource" i redaktören. För att lägga till en serie (dataserier), klicka på knappen Lägg till i redigeringsfönstret och välj en diagramtyp i fönstret som visas (till exempel Fast Line). För att ställa in serienamnen (de kommer att användas i förklaringen för att särskilja graferna) Tryck på knappen "Titel" i samma fönster, den kommer att bli tillgänglig efter att ha specificerat det antal serier som krävs (fig. 4). Ris. 4. Diagrameditorns dialogruta På fliken "Axel" ställs namnen på axlarna in. Alternativet "Vänster" motsvarar Y-axeln, alternativet "Nedre" till X-axeln. För att märka axlarna, använd titelsidan på fliken Axel. För att ställa in titeln på diagrammet, välj fliken "Titlar". Metoder Add, Clear och Delete-metoderna används ofta för att styra de värden som används för att rita ett diagram. Lägg till (AValue, ALabel, AColor) Lägger till värdet till diagrammet som anges av parametern AValue; ALabel-parametern anger namnet på värdet (det vill säga etiketten för X-axeln); parametern AColor ställer in färgen. AddXY (XValue, YValue, XLabel, AColor) 32

33 Lägger till värdet till diagrammet som specificeras av parametrarna XValue, YValue (dvs. punktens koordinater); resten av parametrarna har samma betydelse som för Add-funktionen. Exempel. Grafen för funktionen y = x ^ 2 plottas i intervallet för (int i = 0; i<10; i++) Chart1->Serie-> AddXY (i, i * i); Ta bort (ValIndex) Tar bort ValIndex-numret från diagrammet. Rensa () Tar bort alla värden från diagrammet. Exempel Chart1-> Series-> Clear (); Uppgift Skriv ett program som beräknar en värdetabell för funktionerna y1 (x) = sin (x) och y2 (x) = cos (x) i värdeintervallet axb, x ändras med ett steg dx, och ritar upp funktionerna. Gränserna för intervallet och ändringssteget dx ställs in av användaren. 33

34 ARBETA MED FILER C ++ Builder-miljön erbjuder tre sätt att arbeta med filer: arbeta med strömmar med C-bibliotekets I/O-funktioner, arbeta med strömmar i C ++-stil och använda metoder för dialogkomponenter i utvecklingsmiljön . Låt oss lösa följande problem: skapa ett "Anteckningsblock" -program som låter dig skriva text, spara den och läsa den förberedda textfil... Starta programmeringssystemet C ++ Builder. Placera ett flerrads memo-inmatningsfält på formuläret (text kommer att skrivas i det) och fyra knappar som ska heta: "Rensa", "Skriv", "Läs", "Avsluta". Använd komponenterna SaveDialog och OpenDialog för att spara och söka efter filer. Placera dessa komponenter var som helst på formuläret eftersom de är icke-visuella. En möjlig form av formen visas i fig. 5. Fig. 5. Fönster i programmet "Anteckningar" Du har redan arbetat med Memo-komponenten, men låt oss överväga dess egenskaper och metoder mer i detalj. Rensa ()-metoden rensar inmatningsfönstret. Rader placerade i fönstret nås via egenskapen Lines, som är en rad strängar. Egenskapen Count lagrar antalet strängar (antalet element i arrayen). Radnummer börjar på noll. Metoden Lägg till (s) lägger till strängen s till listan. Metoden Ta bort (n) tar bort den numrerade raden. Metoden Insert (n, s) infogar en ny sträng s mellan elementen i listan vid position n. 34

35 Metoden SaveToFile ("sökväg / filnamn") låter dig spara data som lagras i Memo-fältet till den angivna filen. Metoden LoadFromFile ("sökväg / filnamn") låter dig läsa data som lagras i den angivna filen i Memo-fältet. Låt oss skapa en funktion för att hantera ett klick på knappen "Rensa". Funktionstexten visas nedan. void fastcall TForm1 :: Button1Click (TObject * Avsändare) Memo1-> Clear (); // Låt oss också skapa en procedur för att hantera ett klick på knappen "Avsluta". Vi använder Close-metoden för att avsluta arbetet med applikationen. void fastcall TForm1 :: Button4Click (TObject * Avsändare) Form1-> Close (); // Innan vi utvecklar funktionerna för att hantera de återstående händelserna, låt oss beskriva hur man arbetar med dialogrutorna SaveDialog och OpenDialog. Metoden Execute () används för att anropa Windows. Egenskapen FileName lagrar namnet på filen. Egenskapen Filter låter dig ställa in filter för att söka efter filer. Egenskapen DefaultExt låter dig definiera ett tillägg som automatiskt kommer att läggas till filnamnet. Låt oss skapa en funktion för att hantera ett klick på knappen "Spara". Funktionstexten visas nedan. void fastcall TForm1 :: Button3Click (TObject * Avsändare) SaveDialog1-> DefaultExt = "txt"; if (SaveDialog1-> Execute ()) Memo1-> Lines-> SaveToFile (SaveDialog1-> FileName); 35

36 // Skapa en funktion för att hantera klicket på "Läs"-knappen. Funktionstexten visas nedan. void fastcall TForm1 :: Button2Click (TObject * Avsändare) OpenDialog1-> DefaultExt = "txt"; if (OpenDialog1-> Execute ()) Memo1-> Lines-> LoadFromFile (OpenDialog1-> FileName); // Spara projektet och testa att det fungerar. Om det inte finns några buggar i projektet, gör en fristående ansökan. 36

37 ARBETA MED DATABASER Konfigurera Borland DataBase Engine (BDE) BDE är en databasprocessor; den definierar tekniken för åtkomst av data. BDE administrator 5.0 BDE administrator BDE konfigurationsverktyg. Programmet startas med hjälp av main windows-menyn med hjälp av kommandot Start / Program / Borland C ++ Builder / BDE-administratör. Programmets huvudfönster innehåller två paneler. Den vänstra innehåller ett anteckningsblock med två sidor som visar följande inställningar: Databaser; Konfiguration I den högra rutan finns ett anteckningsblock med en "Definiton"-sida som visas när du väljer ett alternativ i den vänstra rutan. Listan över egenskaper är uppdelad i två delar: Typ innehåller namnet på parametern; Den vänstra innehåller parametervärdet. Konfigurera globala alias Den första sidan i den vänstra rutan i BDE:s administratörsfönster är utformad för att visa, lägga till, ta bort och ändra alias och deras parametrar, vilket ger åtkomst till motsvarande databaser på ett enklare sätt. Ett alias i databasträdet kan vara i följande tillstånd: stängd, öppen, modifierad och skapad. För att lägga till ett alias, använd menykommandot Objekt / Nytt. I fönstret som visas på raden "DataBase Driver Name" väljer du STANDART-värdet för att skapa en databas i Paradox-, Dbase- eller FoxPro-format, eller MSACCESS-värdet för att skapa en databas i MS ACCESS-format. Varje alias har en uppsättning egenskaper. För alias baserade på STANDART-drivrutinen är de följande: TYP namnet på drivrutinen; DEFAULT DRIVER drivrutinsnamn; ENABLED BCD-flagga för att konvertera decimalfältsvärden till binär-decimal; PATH är sökvägen till mappen där databastabellerna finns. Det privata aliaset kan döpas om eller raderas med hjälp av menykommandot Objekt / Byt namn på objekt / Ta bort. 37


Föreläsning 24 Introduktion till objektorienterad programmering av objekt och klasser Grundkonceptet för OOP i C++ är ett objekt. Ett objekt är en slags mjukvaruenhet som kombinerar egenskaper (attribut)

MS Access. Blanketter Föreläsningar om disciplinen "Fundamentals of programmering and information technology", läs vid Institutionen för FMEG FT-Faculty of NTU "KhPI" 1 Formulär Det finns tre sätt att ange information i Access:

Övning 3 Skapa ett formulär Ett formulär är ett databasobjekt som du kan använda för att ange, ändra eller visa data från en tabell eller fråga. Formulär kan användas för att hantera

Arbeta med tabeller 1. Konvertera text till en tabell. a) Infoga skiljetecken, som kommatecken eller tabbar, där texten ska delas upp i kolumner. Använd ett styckemärke, ange

Arbeta med mallar för typiska dokument Användarhandbok Cognitive Technologies Moscow, 2015 2 ABSTRAKT Det här dokumentet ger information om användningen i E1 Euphrates mjukvarupaket

VISUAL BASIC EDITOR Gedranovich Valentina Vasilievna 28 juni 2012 Sammanfattning Kapitel 18 från UMK: Gedranovich, V.V. Grunderna i datorinformationsteknik: studiehandledning. komplex / V.V. Gedranovich,

FÖRELÄSNING-1. INTRODUKTION SYFTE, SAMMANSÄTTNING OCH GRUNDLÄGGANDE ELEMENT I GRÄNSSNITTET FÖR TILLÄMPAD PROGRAMVARA FÖR BEHANDLING AV FÖRETAGSINFORMATION Frågor: 1. Konceptet med programvara och dess klassificering

Ämne 8 Stilar En stil är en uppsättning formateringsalternativ som har ett namn. Stilar tillämpas: - för professionell dokumentdesign; - för att snabbt ändra textens parametrar; - att ge enhetlighet

Laboratoriearbete 12. Ämne: Flerfönsterapplikationer. Modala och modelllösa fönster. Nyckelfrågor: Tillämpning av flera formulär i projekt. Övervägande av olika typer av fönster modal och modelllösa.

Laborationer 7 Ämne: Stilformatering av dokument. Skapa en innehållsförteckning. Använda stilar När du skapar ett dokument måste du ofta hantera rubriker. Typiskt rubriker

Rullningslister 3 LABORATORIE 1 REFERENSSYSTEM OCH KÖRANDE PROGRAM I WINDOWS. Uppgifter: Slå på datorn och ladda Windows-operativsystemet. Hitta panelen på skrivbordsytan

6. FÄRGPROGRAM 6.1. Allmän information Paint är en av de mest populära grafikredigerarna bland nybörjare. Den är utformad för att visa, skapa och redigera

SBEE HPE "Smolensk State Medical Academy" vid Ryska federationens hälsoministerium Fakulteten "Dental" Institutionen för fysik, matematik och medicinsk informatik diskuteras

OpenOffice.org Impress Impress är ett program inom OpenOffice.org för att arbeta med bildspel (presentationer). Du kan skapa bilder som innehåller många olika element, inklusive punkttext

CKEDITOR HTML EDITOR INSTRUKTIONER Beskrivning av CKeditor textformatering 1. CKeditor Editor Services 2. Teckensnittsstilar 3. Textstrukturering 4. Textjustering 5. Lägger in länkar,

Kapitel 3 Microsoft Office 2013 Suite I det här kapitlet kommer vi att titta på hur några av applikationerna som följer med Microsoft Office 2013 kommer att fungera.

Innehållsförteckning. 1 ORD TEXT EDITOR ... 2 VERKTYGSRADER ... 2 REFERENSSYSTEM ... 2 GRUNDTEXT ... 2 INFOGA TEXT ... 2 TA BORT TEXT ... 2 MARKERA TEXT ... 2 BYTA DEN MARKERADE TEXTEN

ARBETA MED MICROSOFT ACCESS DATABASHANTERINGSSYSTEM 1 NYCKELTERMER Fråga - Frågor är ett kraftfullt verktyg för att manipulera data som lagras i Access-tabeller. Med hjälp av frågor kan du visa,

Ryska federationens järnvägsministerium Moscow State University of Railways (MIIT) avdelning "Strömförsörjning av elektriska järnvägar" Godkänd av redaktionen och publiceringen

GRUNDLÄGGANDE ATT ARBETA I MICROSOFT ACCESS. DATABASDESIGN. SKAPA DATABAS. SKAPA AV FORMULAR, RAPPORTER, FÖRFRÅGNINGAR 1. Designa databaser 2. Skapa en databas 3. Skapa formulär, rapporter, frågor

Grunderna för att arbeta i MS Word 2007 Beskrivning av programfönstret När du har startat MS Word öppnas dess fönster på skärmen. Fönstrets titel innehåller namnet på den öppna filen eller Dokument1, Dokument2, if

Hur man öppnar Microsoft Word 2010 3. Grunderna för att arbeta i MicrosoftWord 2010 MicrosoftWord är ett multifunktionellt ordbehandlingssystem (redigerare) för desktop publishing. I Word e vi

2 10 Skapande av grafiska applikationer i Scilab-miljön Scilab låter dig skapa inte bara vanliga program för automatisering av beräkningar, utan även visuella applikationer som kommer att köras i Scilab-miljön.

Tambov regionala statsbudget läroanstalt mitten yrkesutbildning"Instrument-Making College" Ordbehandlare gränssnitt Microsoft Word 2007 Concept

Praktiskt arbete 4 "Katalog", Sida-1, Totalt - 6 Praktiskt arbete 4, REFERENSBOK Problembeskrivning Skapa ett program som utför följande åtgärder. Efter att ha startat programmet väljer användaren

REGIONAL STATLIG BUDGETARISK UTBILDNINGSINSTITUTION FÖR SYNDOMARYRKESUTBILDNING "SMOLENSK AUTOMOTIVE COLEGE uppkallad efter t.ex. Trubitsyn "METODOLOGISKA INSTRUKTIONER för förberedelse för implementering

TEST: "DBMS ACCESS 2007 - KONTROLLTEST". Uppgift # 1 Hur många fält är valda att inkluderas i den genererade RAPPORTEN Välj ett av 5 svarsalternativ: 1) 1 2) 2 3) 3 4) 4 5) 5 Uppgift # 2 Kommer den angivna

Praktisk lektion 1 Skapa anpassade VBA-formulär När du arbetar i Excel, som i de flesta andra applikationer, måste du hantera sådana gränssnittselement som dialogrutor. Konversation

Bekantskap med Open Office OO är ett komplext kontorssystem designat för att skriva, redigera och formatera textdokument av alla komplexiteter. Förutom textdokument tillåter Open Office

Kommunal utbildningsinstitution gymnasieskola 7 i Kolomna, Moskva-regionen Utveckling av en lektion för att studera miljön i OOP Delphi om ämnet: "Allmänna egenskaper hos vissa komponenter"

Introduktion till Micrsft Excel 1. Tabellstruktur 1. Ett kalkylblad består av celler i skärningspunkten mellan rader och kolumner. Rader är numrerade med siffror, kolumner - med latinska bokstäver. Varje cell

FÖRELÄSNING 7. PROGRAM TOTAL COMMANDER Syfte med arbetet: Studera filhanterarens principer Total befälhavare... File Manager Total Commander ger ett annat sätt att arbeta med filer och mappar

Job 10 Tabeller och diagram i Word. Beräkningar i tabeller Syfte med arbetet: att lära sig infoga tabeller och diagram i ett dokument, att utföra beräkningar i tabeller Arbetsinnehåll: 1 Skriva in och formatera tabeller

Labb 2. Grunderna i att arbeta med MathCAD MathCAD fungerar, precis som de flesta andra program, med dokument. Ur användarens synvinkel är ett dokument ett tomt papper att lägga på

Laborationer 1. Ämne. Grunderna i objektorienterad programmering. Borland Delphi visuellt programmeringssystem. Skapande av programgränssnittet. Ställa in egenskaperna för formuläret (fönster). Den huvudsakliga

Standard Component Library Manager CSoft Development, 2009. Alla rättigheter reserverade Innehåll Standard Component Library Manager ... 2 Säkerhetsanmärkning ... 4 Starta Library Manager

Funktionsetiketter i ArcMap Labels är vilken text som helst som hjälper dig att identifiera funktioner på en karta och bättre förstå kartans innehåll. I ArcMap kan du märka rumslig

JSC "Baumann" GODKÄND RU.74533456.00009-02 34 01-LU Integrerat säkerhetskomplex "KODOS" Program "Mnemoniskt schema" Bruksanvisning RU.74533456.00009-02 34 01 2015 ... ALLMÄNT INNEHÅLL 2015 ...

Syfte med programmet Automatisering av alla typer av handlingar med texter. Funktioner skapa, redigera, formatera, spara, bearbeta och skriva ut. Word 2007 professionell textredigerare,

PRAKTISK LEKTION 5 ÄMNE: Integrerad användning av MS Word-funktioner för att skapa stora dokument SYFTE MED ARBETE: Att lära sig att heltäckande använda funktionerna i MS Word för att skapa stora dokument

Laborationer 8 "Arbetsteknik i Explorer-programmet" Syfte med arbetet: studera teknikerna för att arbeta med Explorer-programmet 1. Kort teoretisk information Operativsystemet Windows XP innehåller bl.a.

Kapitel 8 Skapa och använda formulär Som nämnts i kapitel 1 och 2 i den här boken är databasobjekt som formulär i första hand utformade för att endast fungera på en post åt gången.

LABORATORIEARBETE 1. 1. Gå in i VB-miljön För att komma in i VB-miljön, använd fliken Utvecklare i Excel-fönstret, som finns på samma rad med flikarna Hem, Infoga, etc..

VERTICAL-Reports System för att generera teknisk dokumentation Användarmanual Information som finns i det här dokumentet, kan ändras utan föregående meddelande. Ingen del

Arbeta med ABBYY FineReader Bank 7 ABBYY Användarhandbok 2013 Bearbeta dokument i ABBYY FineReader Bank består av fyra steg: Ladda igenkänning Verifiera avlastning

PROGRAMMET "HANTERING AV MINNESMODULER" V 1.0.0 ANVÄNDARHANDBOK INNEHÅLL 1. Beskrivning av programmet 3 1.1. Syftet med programmet 3 1.2. Systemkrav 3 1.3. Installera programmet 3 2. Anpassad

Borttagen: 1C-Bitrix: Site Management 6.x Guide för att skapa och placera webbformulär på sajten Innehåll Introduktion ... 3 Skapa ett webbformulär i ett förenklat läge ... 3 Lägga till ett webbformulär ... 4 Skapa frågor

164 1C: Enterprise 8.2. Utvecklarens praktiska guide Eller så kan du välja dem från rullgardinsmenyn som är tillgänglig när du är i formulärmodulen (Fig. 5.19). Ris. 5.19. Lista över formhändelser I denna

Modul 2. Dator som en uppsättning hårdvara och mjukvara BILAGA 2 Ladda operativsystemet Efter att du har slagit på datorn tar det lite tid innan den är redo att fungera.

INNEHÅLL Kapitel 13: PLACERA FLERA GRAFIK Innehållsförteckning ÖVERSIKT ...

Praktisk lektion. "Arbeta med stilar och mallar. Skapa en automatisk innehållsförteckning och lista med illustrationer »Formatera stilar och skapa mallar. 1) Starta MS Word. 2) Installera följande

Praktiskt arbete 6 Förbereda dokument med hjälp av ordbehandlare som Microsoft Word Syfte med arbetet: Bekantskap med funktionerna i elektroniska dokument och verktyg för att redigera dem i miljön

FAR MANAGER SOFTWARE Plan: Programvaruskal. Far Manager FM Launch och FM Panel gränssnittselement Funktionstangenter FM-meny Välja panelvyer med hjälp av menyn Sortera objekt

Stadier av databasutveckling I regel arbetar icke-professionella med databaser, varför följande krav på en databas kan formuleras. Utvecklare bör fokusera på dessa när de skapar en databas

Snabbstartguide för Microsoft PowerPoint Action Algorithm Var ska jag börja? Starta programmet 1. Klicka på Start-knappen i aktivitetsfältet. 2. Klicka på kommandot Program i menyn som öppnas.

Laboratoriearbete 8 "Konfigurera parametrarna för kringutrustning för datorer" Syfte med arbetet: få information om hur man konfigurerar användargränssnittet för kringutrustning med operativsystemet

I föreläsningstexterna beaktas de grundläggande principerna och medlen för objektorienterad programmering med användning av språket C ++ och programmeringssystemet Borland C ++. Bilagan innehåller uppgifter för självständig lösning. Det antas att läsaren redan är bekant med grunderna i universella programmeringsspråk. Manualen är avsedd för studenter inom specialiteten "Tillämpad matematik" och kan användas av studenter från andra specialiteter för självständiga studier av C++.

1. Objektorienterad programmeringsmetod

1.1 Programmeringsteknik

Programmeringsteknik är en uppsättning metoder och verktyg för att utveckla (skriva) program och proceduren för att tillämpa dessa metoder och verktyg.

I de tidiga stadierna av programmering, när program skrevs i form av sekvenser av maskininstruktioner, fanns ingen programmeringsteknik. De första stegen i teknikutvecklingen bestod i att representera programmet som en sekvens av påståenden. Att skriva en sekvens av maskininstruktioner föregicks av att ett operatörsdiagram upprättades, som speglade sekvensen av operatörer och övergångar mellan dem. Operatörsansatsen gjorde det möjligt att utveckla de första programmen för att automatisera sammanställningen av program - de så kallade programkomponenterna.

Med ökningen av storleken på programmen började deras separata delar att särskiljas och formaliseras som subrutiner. Några av dessa subrutiner kombinerades till bibliotek, från vilka underprogram kunde inkluderas i arbetsprogram och sedan anropas från arbetsprogram. Detta markerade början på procedurprogrammering - stort program representeras av en uppsättning subrutinprocedurer. En av subrutinerna var den huvudsakliga, och från den började körningen av programmet.

1958 utvecklades de första programmeringsspråken, Fortran och Algol-58. Ett Fortran-program bestod av ett huvudprogram och ett antal procedurer – subrutiner och funktioner. Programmet i Algol-58 och dess efterföljande version Algol-60 var en enda helhet, men hade en blockstruktur, inklusive huvudblocket och kapslade block av subrutiner och funktioner. Kompilatorer för Fortran tillhandahöll separat översättning av procedurer och deras efterföljande integration i ett fungerande program, de första kompilatorerna för Algol antog att hela programmet översattes på en gång, separat översättning av procedurer tillhandahölls inte.

Det förfarandemässiga tillvägagångssättet krävde att det framtida programmet strukturerades och delades upp i separata förfaranden. När man utvecklade en separat procedur om andra procedurer krävdes det att man bara visste deras syfte och anropsmetod. Nu är det möjligt att omarbeta individuella procedurer utan att påverka resten av programmet, samtidigt som man minskar arbets- och datortiden som läggs på att utveckla och modernisera program.

Nästa steg i att fördjupa struktureringen av program var den så kallade strukturerade programmeringen, där programmet som helhet och individuella procedurer betraktades som sekvenser av kanoniska strukturer: linjära sektioner, loopar och gafflar. Det blev möjligt att läsa och kontrollera programmet som sekventiell text, vilket ökade produktiviteten för programmerare vid utveckling och felsökning av program. För att öka programmets struktur ställdes krav på större oberoende av subrutiner, subrutiner måste kommunicera med de anropande programmen endast genom att skicka dem argument, använda variabler som hör till andra procedurer i subrutiner, eller huvudprogrammet, ansågs oönskat.

Procedurmässig och strukturerad programmering påverkade först och främst processen att beskriva en algoritm som en sekvens av steg som leder från variabel indata till det önskade resultatet. För att lösa speciella problem började programmeringsspråk utvecklas, fokuserade på en specifik klass av problem: på databashanteringssystem, simuleringsmodellering, etc.

I utvecklingen av översättare har mer och mer uppmärksamhet ägnats åt att upptäcka fel i programs källkod och därigenom minska tiden som läggs på felsökning av program.

Användningen av program inom olika områden av mänsklig aktivitet har lett till behovet av att förbättra tillförlitligheten hos all programvara. En av riktningarna för att förbättra programmeringsspråken har blivit en ökning av nivån på datainmatning. Datatypteorin antar att varje data som används i ett program tillhör en och endast en datatyp. Datatypen definierar uppsättningen av möjliga värden för datumet och uppsättningen av operationer som är tillåtna på detta datum. I vissa fall kan en given given typ konverteras till given av en annan typ, men en sådan omvandling måste explicit representeras i programmet. Beroende på graden av uppfyllelse av de listade kraven kan vi prata om nivån på att skriva ett visst programmeringsspråk. Önskan att öka nivån på att skriva programmeringsspråket ledde till framväxten av Pascal-språket, som anses vara ett starkt typat språk, även om det också tillåter vissa implicita typkonverteringar, till exempel heltal till verkligt. Användningen av ett starkt skrivet språk när man skriver ett program gör att vi kan identifiera många fel i användningen av data även under översättningen av källtexten och därigenom öka programmets tillförlitlighet. Samtidigt begränsade strikt typning programmerarens frihet, vilket gjorde det svårt att använda några av de datatransformationstekniker som ofta används i systemprogrammering. Nästan samtidigt med Pascal utvecklades C-språket, mer fokuserat på systemprogrammering och relaterat till svagt skrivna språk.

Alla universella programmeringsspråk implementerar, trots skillnaderna i syntax och använda nyckelord, samma kanoniska strukturer: tilldelningsoperatorer, loopar och forking. I alla moderna språk det finns fördefinierade (grundläggande) datatyper (heltals- och reella aritmetiska typer, tecken och eventuellt strängtyper), det är möjligt att använda dataaggregat, inklusive matriser och strukturer (poster). För aritmetiska data är vanliga aritmetiska operationer tillåtna, för dataaggregat tillhandahålls vanligtvis endast en tilldelningsoperation och möjligheten att komma åt elementen i aggregatet. Vid utveckling av ett program för att lösa ett specifikt tillämpat problem är samtidigt största möjliga konceptuella närhet av programtexten till problembeskrivningen önskvärd. Om till exempel att lösa ett problem kräver att man utför operationer på komplexa tal eller kvadratmatriser, är det önskvärt att programmet uttryckligen innehåller operatorer för addition, subtraktion, multiplikation och division av data såsom ett komplext tal, addition, subtraktion, multiplikation och inversion av data. data som en kvadratisk matris. Lösningen på detta problem är möjlig på flera sätt:

Genom att konstruera ett programmeringsspråk som innehåller så många datatyper som möjligt och genom att välja en viss delmängd av detta språk för varje klass av problem. Ett sådant språk kallas ibland för ett skalspråk. Språket PL/1 hävdade rollen som ett skalspråk, vilket visade sig vara så komplext att det inte gick att konstruera en formaliserad beskrivning av det. Avsaknaden av en formaliserad beskrivning hindrade dock inte den utbredda användningen av PL / 1 som i Västeuropa och i Sovjetunionen.

Genom att bygga ett utbyggbart språk som innehåller en liten kärna och kan utökas, kompletterar språket med datatyper och operatorer som återspeglar den konceptuella essensen av en viss klass av problem. Ett sådant språk kallas kärnspråket. Språken Simula och Algol-68 utvecklades som ett kärnspråk, som inte fick stor spridning, men hade stort inflytande på utvecklingen av andra programmeringsspråk.

Den vidare utvecklingen av det andra sättet var det objektorienterade tillvägagångssättet för programmering, som behandlas i nästa avsnitt.

1.2. Kärnan i objektorienterad programmering

Huvudidéerna för det objektorienterade tillvägagångssättet bygger på följande bestämmelser:

Programmet är en modell av någon verklig process, en del av den verkliga världen.

Modellen av den verkliga världen eller dess del kan beskrivas som en uppsättning interagerande objekt.

Ett objekt beskrivs av en uppsättning parametrar, vars värden bestämmer objektets tillstånd, och en uppsättning operationer (åtgärder) som objektet kan utföra.

Interaktion mellan objekt utförs genom att skicka speciella meddelanden från ett objekt till ett annat. Ett meddelande som tas emot av ett objekt kan kräva att vissa åtgärder utförs, till exempel att ändra objektets tillstånd.

Objekt som beskrivs av samma uppsättning parametrar och som kan utföra samma uppsättning åtgärder är en klass av objekt av samma typ.

Ur ett programmeringsspråks synvinkel kan en klass av objekt ses som en datatyp och ett separat objekt som ett datum av denna typ. Programmerarens definition av sina egna klasser av objekt för en specifik uppsättning uppgifter bör göra det möjligt att beskriva individuella uppgifter i termer av själva klassen av uppgifter (med ett lämpligt val av typnamn och namn på objekt, deras parametrar och utförda åtgärder).

Det objektorienterade tillvägagångssättet förutsätter alltså att när man utvecklar ett program måste klasserna av objekt som används i programmet definieras och deras beskrivningar byggas, sedan skapas instanser av de nödvändiga objekten och interaktionen mellan dem bestäms.

Det är ofta bekvämt att konstruera objektklasser så att de bildar en hierarkisk struktur. Till exempel kan klassen ”Student”, som beskriver en abstrakt elev, fungera som underlag för att konstruera klasserna ”1:a årselev”, ”2:a årselev” etc. som har alla egenskaper hos en elev i allmänhet och några ytterligare egenskaper som kännetecknar en elev på en viss kurs. När man utvecklar ett gränssnitt med en användare kan program använda objekt av den allmänna klassen "Fönster" och objekt i klasserna av speciella fönster, till exempel informationsmeddelandefönster, datainmatningsfönster, etc. I sådana hierarkiska strukturer kan en klass betraktas som basen för andra klasser som härrör från den. Ett härlett klassobjekt har alla basklassens egenskaper och några av dess egna egenskaper, det kan svara på samma typer av meddelanden från andra objekt som objektet för basklassen och på meddelanden som endast är meningsfulla för den härledda klassen. Det brukar sägas att ett objekt av en härledd klass ärver alla egenskaper hos sin basklass.

Programmeringsteknik. Kärnan i det objektorienterade förhållningssättet till programmering. Utnämning av Xi, historisk information. Alfabet, grundläggande typer och databeskrivning. Strukturer och föreningar. C++-operatorer. Funktioner. Körtidsbibliotek.

Skicka ditt goda arbete i kunskapsbasen är enkelt. Använd formuläret nedan

Studenter, doktorander, unga forskare som använder kunskapsbasen i sina studier och arbete kommer att vara er mycket tacksamma.

Objektorienterad programmering med Borland C++

Texter från föreläsningar vid Moscow State University of Economics, Statistics and Informatics

I föreläsningstexterna beaktas de grundläggande principerna och medlen för objektorienterad programmering med användning av språket C ++ och programmeringssystemet Borland C ++. Bilagan innehåller uppgifter för självständig lösning. Det antas att läsaren redan är bekant med grunderna i universella programmeringsspråk. Manualen är avsedd för studenter inom specialiteten "Tillämpad matematik" och kan användas av studenter från andra specialiteter för självständiga studier av C++.

1. Objektorienterad programmeringsmetod

1.1 Programmeringsteknik

Programmeringsteknik är en uppsättning metoder och verktyg för att utveckla (skriva) program och proceduren för att tillämpa dessa metoder och verktyg.

I de tidiga stadierna av programmering, när program skrevs i form av sekvenser av maskininstruktioner, fanns ingen programmeringsteknik. De första stegen i teknikutvecklingen bestod i att representera programmet som en sekvens av påståenden. Att skriva en sekvens av maskininstruktioner föregicks av att ett operatörsdiagram upprättades, som speglade sekvensen av operatörer och övergångar mellan dem. Operatörsansatsen gjorde det möjligt att utveckla de första programmen för att automatisera sammanställningen av program - de så kallade programkomponenterna.

Med ökningen av storleken på programmen började deras separata delar att särskiljas och formaliseras som subrutiner. Några av dessa subrutiner kombinerades till bibliotek, från vilka underprogram kunde inkluderas i arbetsprogram och sedan anropas från arbetsprogram. Detta markerade början på procedurprogrammering - ett stort program representerades av en uppsättning subrutiner. En av subrutinerna var den huvudsakliga, och från den började körningen av programmet.

1958 utvecklades de första programmeringsspråken, Fortran och Algol-58. Ett Fortran-program bestod av ett huvudprogram och ett antal procedurer – subrutiner och funktioner. Programmet i Algol-58 och dess efterföljande version Algol-60 var en enda helhet, men hade en blockstruktur, inklusive huvudblocket och kapslade block av subrutiner och funktioner. Kompilatorer för Fortran tillhandahöll separat översättning av procedurer och deras efterföljande integration i ett fungerande program, de första kompilatorerna för Algol antog att hela programmet översattes på en gång, separat översättning av procedurer tillhandahölls inte.

Det förfarandemässiga tillvägagångssättet krävde att det framtida programmet strukturerades och delades upp i separata förfaranden. När man utvecklade en separat procedur om andra procedurer krävdes det att man bara visste deras syfte och anropsmetod. Nu är det möjligt att omarbeta individuella procedurer utan att påverka resten av programmet, samtidigt som man minskar arbets- och datortiden som läggs på att utveckla och modernisera program.

Nästa steg i att fördjupa struktureringen av program var den så kallade strukturerade programmeringen, där programmet som helhet och individuella procedurer betraktades som sekvenser av kanoniska strukturer: linjära sektioner, loopar och gafflar. Det blev möjligt att läsa och kontrollera programmet som sekventiell text, vilket ökade produktiviteten för programmerare vid utveckling och felsökning av program. För att öka programmets struktur ställdes krav på större oberoende av subrutiner, subrutiner måste kommunicera med de anropande programmen endast genom att förmedla dem argument, användningen av variabler som hör till andra procedurer eller huvudprogrammet i subrutiner har blivit oönskad .

Procedurmässig och strukturerad programmering påverkade först och främst processen att beskriva en algoritm som en sekvens av steg som leder från variabel indata till det önskade resultatet. För att lösa speciella problem började programmeringsspråk utvecklas, fokuserade på en specifik klass av problem: på databashanteringssystem, simuleringsmodellering, etc.

I utvecklingen av översättare har mer och mer uppmärksamhet ägnats åt att upptäcka fel i programs källkod och därigenom minska tiden som läggs på felsökning av program.

Användningen av program inom olika områden av mänsklig aktivitet har lett till behovet av att förbättra tillförlitligheten hos all programvara. En av riktningarna för att förbättra programmeringsspråken har blivit en ökning av nivån på datainmatning. Datatypteorin antar att varje data som används i ett program tillhör en och endast en datatyp. Datatypen definierar uppsättningen av möjliga värden för datumet och uppsättningen av operationer som är tillåtna på detta datum. I vissa fall kan en given given typ konverteras till given av en annan typ, men en sådan omvandling måste explicit representeras i programmet. Beroende på graden av uppfyllelse av de listade kraven kan vi prata om nivån på att skriva ett visst programmeringsspråk. Önskan att öka nivån på att skriva programmeringsspråket ledde till framväxten av Pascal-språket, som anses vara ett starkt typat språk, även om det också tillåter vissa implicita typkonverteringar, till exempel heltal till verkligt. Användningen av ett starkt skrivet språk när man skriver ett program gör att vi kan identifiera många fel i användningen av data även under översättningen av källtexten och därigenom öka programmets tillförlitlighet. Samtidigt begränsade strikt typning programmerarens frihet, vilket gjorde det svårt att använda några av de datatransformationstekniker som ofta används i systemprogrammering. Nästan samtidigt med Pascal utvecklades C-språket, mer fokuserat på systemprogrammering och relaterat till svagt skrivna språk.

Alla universella programmeringsspråk implementerar, trots skillnaderna i syntax och använda nyckelord, samma kanoniska strukturer: tilldelningsoperatorer, loopar och forking. Alla moderna språk har fördefinierade (grundläggande) datatyper (heltals- och reella aritmetiska typer, tecken och eventuellt strängtyper), det är möjligt att använda dataaggregat, inklusive matriser och strukturer (poster). För aritmetiska data är vanliga aritmetiska operationer tillåtna, för dataaggregat tillhandahålls vanligtvis endast en tilldelningsoperation och möjligheten att komma åt elementen i aggregatet. Vid utveckling av ett program för att lösa ett specifikt tillämpat problem är samtidigt största möjliga konceptuella närhet av programtexten till problembeskrivningen önskvärd. Om till exempel att lösa ett problem kräver att man utför operationer på komplexa tal eller kvadratmatriser, är det önskvärt att programmet uttryckligen innehåller operatorer för addition, subtraktion, multiplikation och division av data såsom ett komplext tal, addition, subtraktion, multiplikation och inversion av data. data som en kvadratisk matris. Lösningen på detta problem är möjlig på flera sätt:

Genom att konstruera ett programmeringsspråk som innehåller så många datatyper som möjligt och genom att välja en viss delmängd av detta språk för varje klass av problem. Ett sådant språk kallas ibland för ett skalspråk. Språket PL/1 hävdade rollen som ett skalspråk, vilket visade sig vara så komplext att det inte gick att konstruera en formaliserad beskrivning av det. Avsaknaden av en formaliserad beskrivning hindrade dock inte den utbredda användningen av PL/1 både i Västeuropa och i Sovjetunionen.

Genom att bygga ett utbyggbart språk som innehåller en liten kärna och kan utökas, kompletterar språket med datatyper och operatorer som återspeglar den konceptuella essensen av en viss klass av problem. Ett sådant språk kallas kärnspråket. Språken Simula och Algol-68 utvecklades som ett kärnspråk, som inte fick stor spridning, men hade stort inflytande på utvecklingen av andra programmeringsspråk.

Den vidare utvecklingen av det andra sättet var det objektorienterade tillvägagångssättet för programmering, som behandlas i nästa avsnitt.

1.2. Kärnan i objektorienterad programmering

Huvudidéerna för det objektorienterade tillvägagångssättet bygger på följande bestämmelser:

Programmet är en modell av någon verklig process, en del av den verkliga världen.

Modellen av den verkliga världen eller dess del kan beskrivas som en uppsättning interagerande objekt.

Ett objekt beskrivs av en uppsättning parametrar, vars värden bestämmer objektets tillstånd, och en uppsättning operationer (åtgärder) som objektet kan utföra.

Interaktion mellan objekt utförs genom att skicka speciella meddelanden från ett objekt till ett annat. Ett meddelande som tas emot av ett objekt kan kräva att vissa åtgärder utförs, till exempel att ändra objektets tillstånd.

Objekt som beskrivs av samma uppsättning parametrar och som kan utföra samma uppsättning åtgärder är en klass av objekt av samma typ.

Ur ett programmeringsspråks synvinkel kan en klass av objekt ses som en datatyp och ett separat objekt som ett datum av denna typ. Programmerarens definition av sina egna klasser av objekt för en specifik uppsättning uppgifter bör göra det möjligt att beskriva individuella uppgifter i termer av själva klassen av uppgifter (med ett lämpligt val av typnamn och namn på objekt, deras parametrar och utförda åtgärder).

Det objektorienterade tillvägagångssättet förutsätter alltså att när man utvecklar ett program måste klasserna av objekt som används i programmet definieras och deras beskrivningar byggas, sedan skapas instanser av de nödvändiga objekten och interaktionen mellan dem bestäms.

Det är ofta bekvämt att konstruera objektklasser så att de bildar en hierarkisk struktur. Till exempel kan klassen ”Student”, som beskriver en abstrakt elev, fungera som underlag för att konstruera klasserna ”1:a årselev”, ”2:a årselev” etc. som har alla egenskaper hos en elev i allmänhet och några ytterligare egenskaper som kännetecknar en elev på en viss kurs. När man utvecklar ett gränssnitt med en användare kan program använda objekt av den allmänna klassen "Fönster" och objekt i klasserna av speciella fönster, till exempel informationsmeddelandefönster, datainmatningsfönster, etc. I sådana hierarkiska strukturer kan en klass betraktas som basen för andra klasser som härrör från den. Ett härlett klassobjekt har alla basklassens egenskaper och några av dess egna egenskaper, det kan svara på samma typer av meddelanden från andra objekt som objektet för basklassen och på meddelanden som endast är meningsfulla för den härledda klassen. Det brukar sägas att ett objekt av en härledd klass ärver alla egenskaper hos sin basklass.

Vissa parametrar för ett objekt kan lokaliseras inuti objektet och är otillgängliga för direkt påverkan utifrån objektet. Till exempel, medan fordonsobjektet rör sig kan förarobjektet endast agera på en begränsad uppsättning kontroller (ratt, gaspedal, kopplings- och bromspedaler, växelspak) och ett antal parametrar som kännetecknar motorns tillstånd och motorns tillstånd. bilen som helhet är otillgängliga för den.

Uppenbarligen, för att produktivt kunna tillämpa objektsynsättet för programutveckling, behövs programmeringsspråk som stödjer detta tillvägagångssätt, dvs. tillåta att konstruera en beskrivning av klasser av objekt, att bilda data av objekttyper, att utföra operationer på objekt. Ett av de första sådana språken var SmallTalk-språket där all data är objekt i vissa klasser, och det allmänna klasssystemet är byggt som en hierarkisk struktur baserad på fördefinierade basklasser.

Erfarenhet av programmering visar att någon metodiskt tillvägagångssätt i programmeringsteknik bör inte tillämpas blint, ignorera andra tillvägagångssätt. Detta gäller även det objektorienterade förhållningssättet. Det finns ett antal typiska problem, för vilken dess användbarhet är mest uppenbar, inkluderar sådana problem i synnerhet problemen med simuleringsmodellering, programmering av dialoger med användaren. Det finns också uppgifter där användningen objekt tillvägagångssätt kommer inte att leda till någonting, förutom onödiga arbetskostnader. I detta avseende är de mest utbredda objektorienterade programmeringsspråk som låter dig kombinera objektstrategin med andra metoder. I vissa språk och programmeringssystem begränsas användningen av objektmetoden med hjälp av användargränssnittet (till exempel tidigare versioner av Visual FoxPro).

De mest använda objektorienterade språken för närvarande är Pascal med objekt och C++, och de mest avancerade verktygen för att arbeta med objekt finns i C++.

Nästan alla objektorienterade programmeringsspråk utvecklar språk, deras standarder uppdateras och utökas regelbundet. Konsekvensen av denna utveckling är de oundvikliga skillnaderna i inmatningsspråken för kompilatorerna för olika programmeringssystem. De mest utbredda för närvarande är Microsoft C++, Microsoft Visual C++ och Borland International programmeringssystem. Ytterligare material i denna handledning presenteras i relation till programmeringssystemet Borland C++. Detta beror främst på närvaron i detta programmeringssystem av en utvecklad integrerad miljö som kombinerar en textredigerare, kompilator, länkare (länkare) och felsökningsverktyg.

2. Inledande information om C-språket

2.1 Syfte med C, historisk information

C-språket utvecklades på 70-talet som ett systemprogrammeringsspråk. Samtidigt var uppgiften att få fram ett språk som ger implementering av idéerna om procedurell och strukturerad programmering och möjligheten att implementera specifika tekniker för systemprogrammering. Ett sådant språk skulle möjliggöra utvecklingen av komplexa program på en nivå som är jämförbar med programmering i Assembly-språk, men mycket snabbare. Dessa mål har i princip uppnåtts. De flesta av C-kompilatorerna är skrivna i C, fungerar UNIX-system <также почти полностью написана на Си. Недостатком Си оказалась низкая надежность разрабатываемых программ из-за отсутствия контроля типов. Попытка поправить дело включением в систему программирования Си отдельной программы, контролирующей неявные преобразования типов, решила эту проблему лишь частично.

På basis av C på 80-talet utvecklades språket C ++, först kallat "C med klasser". C ++ innehåller praktiskt taget C-språket och kompletteras med hjälp av objektorienterad programmering. Arbetsversionen av C++ dök upp 1983. Sedan dess har språket fortsatt att utvecklas och flera versioner av utkasten till C- och C++-standarder har publicerats.

Ett antal mjukvaruföretag har utvecklat kompilatorer för C och C++. Borland Internationals programmeringssystem skiljer sig från andra företag främst för ett integrerat tillvägagångssätt för programvaruutveckling, uttryckt i införandet av en integrerad utvecklarmiljö i programmeringssystemet, som under gemensam kontroll förenar en textredigerare för inmatning av programkällkoder, en kompilator, en länkredigerare och en uppsättning felsökningsverktyg. 1989 släppte detta företag Turbo C++-systemet, som inkluderade en C++-kompilator som fungerar i DOS-operativsystemet; sedan 1992 har Borland C++-system släppts innehållande C++-kompilatorer för DOS och WINDOWS; sedan 1997 , Borland-versionen har levererats C 5.0, som innehåller C++-kompilatorer för WINDOWS, och kompilatorn för WINDOWS tillåter nu utveckling av både 16-bitars och 32-bitarsversioner av program för persondatorer med i486- och Pentium-processorer.

Ett C / C ++-program är en eller flera källfiler som kan översättas separat. Översättningsresultat (objektfiler) kombineras till en körbar fil av länken (länkaren). Vanligtvis särskiljs två typer av källfiler: huvudfiler och programfiler. Header-filer innehåller beskrivningar av datatyper och funktionsprototyper och är avsedda att ingå i programfiler innan de kompileras, deras namn brukar ha filtillägget .h, till exempel stdio.h. Programfiler innehåller beskrivningar av funktioner och, möjligen, globala variabler och konstanter, deras namn skrivs vanligtvis med tilläggen .c eller .cpp, till exempel myprog.cpp. Samma rubrikfil kan inkluderas i flera programfiler

Varje fil innehåller en sekvens av så kallade "externa definitioner" som beskriver datatyper, variabler, konstanter och funktioner.

De efterföljande styckena i detta avsnitt ger en översikt över C/C++-verktyg som inte är relaterade till C++-objektorientering.

2.2 Alfabet, grundläggande typer och databeskrivning.

Språkets alfabet innehåller nästan alla tecken som är tillgängliga på ett standard PC-tangentbord:

Latinska bokstäver A ... Z, a ... z;

Siffror 0 ... 9;

Operationstecken och avgränsare:

{ } () . , -> & * + - ~ ! / % ? : ; = < > | # ^

Vissa operationer betecknas med kombinationer av symboler, betydelsen av operationssymboler beror i vissa fall på i vilket sammanhang de används.

Grundläggande (fördefinierade) datatyper grupperas i två grupper: heltalsdata och flyttalsdata (real).

Heltalsdata kan antingen vara signerade eller osignerade. Genom antalet bitar som används för att representera ett givet (intervall av värden), särskiljs vanliga heltal (int), korta heltal (kort int) och långa heltal (lång int). Teckendata (char) behandlas också som heltal och kan vara signerade eller osignerade.

Heltalskonstanter skrivs som sekvenser av decimalsiffror, typen av konstant beror på antalet siffror i konstantposten och kan specificeras genom att lägga till bokstäverna L eller l (lång typ), U eller u (osignerad typ) eller deras kombination i slutet av konstanten:

321 - konstant av typen int,

5326u - en konstant av typen unsigned int,

45637778 - lång int-typkonstant,

2746L är en lång int-typkonstant.

Heltalskonstanter kan skrivas in oktalt system beräkning, i det här fallet måste den första siffran vara siffran 0, numret kan bara innehålla siffrorna 0 ... 7:

0777 - konstant av typen int,

0453377 är en lång typkonstant.

Heltalskonstanter kan också skrivas i hexadecimal notation, i vilket fall konstanten börjar med tecknen 0x eller 0X:

0x45F - konstant av typen int,

0xFFFFFFFF är en lång konstant utan tecken.

Teckenkonstanter omges alltid av enkla citattecken, konstantens värde anges antingen av ett tecken från den använda teckenuppsättningen eller av en heltalskonstant som föregås av ett omvänt snedstreck: "A", "\ 33", "\ 042", "\ x1B". Det finns också ett antal specialtecken som kan anges som värden för en konstant av typen char:

"\ n" är en ny rad,

"\ t" - horisontell tabell,

"\ v" - vertikal flik,

"\ r" - vagnretur,

"\ f" - sidöversättning,

"\a" - ljudsignal,

"\" "- enstaka citat (apostrof),

"\" "- dubbla citattecken,

"\\" är ett snedstreck.

Reella tal kan vara värden av en av tre typer: flytande, dubbel, lång dubbel. Värdeintervallet för var och en av dessa typer beror på vilken dator och kompilator som används. Konstanter av reella typer kan skrivas i naturliga eller exponentiella former och är av typen dubbel som standard, till exempel 15.31, 1.43E-3, 2345.1e4. Vid behov kan typen av konstant specificeras genom att skriva suffixet f eller F i slutet för floattypen, suffixet l eller L för den långa dubbeltypen.

En extern definition som deklarerar variabler består av en valfri minnesklassspecifikator, typspecifikatorer och en lista med så kallade initialiseringsdeklaratorer, som var och en deklarerar identifieraren för en variabel och eventuellt värdet som tilldelas variabeln när den deklareras . Den yttre definitionen slutar med semikolon:

int i, j, k; // Tre variabler av typen int utan explicit initiering

dubbel x = 1, y = 2; // Två variabler av typen dubblar med initialvärden 1 och 2

char c1 = "0"; // Variabel av typen char, dess värde är bokstavskod 0

Texten skriven efter //-tecknen i dessa exempel är en kommentar och tjänar endast till att dokumentera programmet. En sådan kommentar kan endast uppta en rad text och är tillåten i texten i C++-program. Flera kommentarsrader omges av speciella parenteser / * och * /.

Ett av nyckelorden extern, static eller typedef kan anges som specificatorer av en minnesklass i en extern definition. Extern specificator betyder att det deklarerade objektet tillhör en annan programfil och här ges information om dess namn och typ samt en initialisering uttryck ska inte finnas. Den statiska specificatorn begränsar omfattningen av det deklarerade namnet till den givna filen eller blocket om deklarationen finns i ett block.

Om en given deklaration finns i huvuddelen av en funktion (lokal deklaration), kan registret eller specificeras. Registerspecifikatorn är av rådgivande karaktär, kompilatorn försöker placera denna klass i processorregistret om det finns lediga register för tillfället. Autospecificeraren accepteras som standard och är därför inte explicit specificerad, det betyder att denna klass auto måste placeras på programstacken när funktionen anropas.

Typedef-specifikatorn tjänar till att tilldela ett namn till den beskrivna datatypen och kommer att diskuteras mer i detalj i nästa avsnitt.

Tillsammans med de bokstavliga konstanterna som visas ovan, vars värden bestäms av deras representation i programmet, ger C och C ++ konstanter som tilldelas sina egna namn - namngivna konstanter. Det finns en const-specifikator i beskrivningen av en namngiven konstant, till exempel,

const dubbel Pi = 3,141592653;

En variabel vars identifierare deklareras med en const-deskriptor kan inte tilldelas ett annat värde än vad som sattes när identifieraren deklarerades. Ett initialiseringsvärde krävs när en konstant deklareras.

Tillsammans med grundläggande heltal och reella typer av olika storlekar, kan programmet deklarera och använda data av typer som definierats av programmeraren: pekare, referenser, dataaggregat och data av den uppräknade typen.

En uppräknad typ används för data av en heltalstyp som kan ta en begränsad uppsättning värden. Varje värde har sitt eget identifierarnamn och ett heltal, värdet för detta namn. En uppräknad typdeklaration är byggd enligt följande schema:

enum-identifierare (uppräkningslista) deklaratorer-initialiserare;

Här anger identifieraren namnet på den uppräknade typen, uppräkningslistan består av kommaseparerade uppräknare. Varje enumerator specificeras av en identifierare och eventuellt ett heltalsvärde av typen char eller int, till exempel

enum färg (RÖD, GRÖN, BLÅ) en_color;

enum lex_type (CNST, VAR, OPER = 3, FUNC);

Om inget uppräkningsvärde anges, får den första av dem värdet 0, och varje nästa får ett värde som är större med 1. I allmänhet har alla uppräknare ett värde som är 1 större än den föregående som standard. Det är vanligt i C / C ++ att skriva enumerator-identifierare med versaler. Uppräkningsnamn används antingen som namngivna konstanter eller för tilldelning till variabler av en uppräknad typ.

I C / C ++ används pekare för referenser till en variabel av en eller annan typ. En pekare är en datatyp vars värde är adressen till ett annat datum. När du deklarerar en pekare skrivs en * framför identifieraren. Pekaren kan initieras med adressen till den givna; & (ampersand) operationen används för att få adressen:

dubbel * px, * py =

Jämförelseoperationer, addition av en pekare till ett heltal, subtraktion av två pekare och även en indexeringsoperation (operation) definieras för pekare.

För att komma åt en variabel med pekare utförs en dereferenceoperation, betecknad med * (asterisk), till exempel * py = 7,5; ...

När du deklarerar en pekare kan const-specifikatorn användas t.ex.

const int cc = 20;

const int * pc = // Kan initieras med adressen till en konstant.

dubbel * const delta = 0,001; // Pekaren är en konstant

Förutom vanliga variabler och pekare har C ++ en "variabelreferens"-typ som anger ett extra namn (alias) för en variabel. Den interna representationen av en länk är densamma som den för en pekare, dvs. i form av en variabel adress, men en referens till en variabel genom referens skrivs i samma form som en referens till basnamnet. En variabel av länktypen initieras alltid genom att ange namnet på den variabel som länken tillhör. När du deklarerar en länk skrivs & (ampersand)-tecknet efter typnamnet:

Med denna beskrivning är operatorerna aii = 5; och ii = 5; är likvärdiga.

Matriser kan bildas av variabler av vilken typ som helst. När en array deklareras i initialiseringsdeklaratorn anges antalet arrayelement inom hakparenteser efter array-identifieraren:

int a [5]; // En matris med fem int-element

Indexen för arrayelementen börjar alltid på 0, indexet för det sista elementet är ett mindre än antalet element i arrayen. En array kan initieras med en lista med värden i hängslen:

int b [4] = (1, 2, 3, 4);

Om det finns en initieringslista som täcker alla element i arrayen behöver du inte ange antalet element i arrayen, det kommer att bestämmas av kompilatorn:

int c = (1, 2, 3); // En matris med tre int-element

Matriser med en dimension på 2 eller mer betraktas som matriser av matriser och antalet element anges för varje dimension:

dubbel aa [2] [2] = (1, 2, 3, 4); // Matris 2 * 2

Char arrays kan initieras med en strängliteral. En bokstavlig sträng är en sekvens av alla andra tecken än citattecken och omvända snedstreck, omgivna av citattecken. Om en bokstavssträng inte får plats på en rad kan du avsluta den med ett "\" och fortsätta i början av nästa rad. C ++-standarden ger också ett annat alternativ för att skriva långa bokstaver som flera på varandra följande strängliteraler. Om det inte finns några andra tecken än blanksteg mellan strängliteralerna, slås sådana literaler samman till en av kompilatorn.

När det placeras i minnet läggs tecknet "\ 0" till i slutet av strängen. noll byte. En strängliteral kan också användas för att initiera en pekare till en teckentyp:

char str1 [11] = "Detta är en sträng",

str2 = "Storleken på denna array bestäms"

"antalet tecken i bokstaven + 1";

char * pstr = "Stränginitialiserad pekare";

Ett arraynamn i C / C ++ är en konstant pekare som hänvisar till det första elementet i arrayen med index lika med noll. För att referera till ett arrayelement anges arrayidentifieraren och elementindexet inom parentes, till exempel c, aa.

2.3 Strukturer och föreningar

Tillsammans med arrayer i C / C ++ finns det dataaggregat som strukturer och fackföreningar. En strukturtyp är en ordnad samling av data av olika typer som kan nås som en enda data. Beskrivningen av den strukturella typen är byggd enligt schemat:

struct id

(medlemsdeklaratorer) initializer_declarators;

En sådan deklaration utför två funktioner, dels deklarerar den en strukturerad typ, och dels deklarerar den variabler av denna typ.

Identifieraren efter nyckelordet struct är namnet på den strukturerade typen. Typnamnet kan saknas, då kommer typen att vara namnlös och det kommer inte att vara möjligt att deklarera data av denna typ i andra delar av programmet. Declarators_initializers deklarerar specifika variabler av en strukturerad typ, dvs. data av den beskrivna typen, pekare till denna typ och datamatriser. Declarators_initializers kan saknas, i vilket fall deklarationen endast beskriver typen av struktur.

En struktur som beskriver en punkt på ett plan kan definieras enligt följande:

struct Point_struct // Strukturnamn

(int x, y;) // Deklaratorer av strukturmedlemmar

punkt1, * ptr_to_point, arpoint; // Strukturerad data

Medlemmar (komponenter) i en struktur beskrivs på samma sätt som data av motsvarande typ och kan vara skalära data, pekare, arrayer eller data av en annan strukturtyp. Till exempel, för att beskriva strukturtypen "rektangel med sidor parallella med koordinataxlarna", kan du erbjuda flera alternativ:

(Punkt p1; // Koordinater för det övre vänstra hörnet

Punkt p2; // Koordinater för det nedre högra hörnet

(Punkt p; // Övre vänstra hörnet

int bredd; // Bredd

int hög; // Rektangelns höjd

Eftersom endast tidigare definierade typnamn ska användas vid beskrivning av strukturmedlemmar finns det en variant av den preliminära strukturdeklarationen som endast anger namnet på den strukturerade typen. Till exempel, för att beskriva ett element i ett binärt träd som innehåller pekare till vänster och höger grenar av trädet och en pekare till någon struktur av typen Värde som innehåller värdet för det givna i noden, kan du göra följande:

struct Tree_element

Trädelement * vänster, * höger;

Medlemmar av strukturer kan vara de så kallade bitfälten, när flera heltalsdata av mindre längd placeras i minnesfältet för en variabel av heltalstyp (int eller unsigned int). Anta, till exempel, i ett parsingprogram innehåller beskrivningen av en token typen av token (upp till sex värden) och tokens ordningsnummer i tabellen för motsvarande typ (upp till 2000 värden). För att representera ett värde av typen av en token räcker det med tre binära siffror (tre bitar) och för att representera siffror från 0 till 2000 - 11 binära siffror (11 bitar). Beskrivningen av strukturen som innehåller information om token kan se ut så här:

(osignerad int type_lex: 3;

osignerad int num_lex: 11;

Ett kolon följt av ett heltal efter medlemsnamnet anger att det är ett bitfält, och ett heltal anger storleken på fältet i bitar.

En union kan definieras som en struktur, vars alla komponenter finns i minnet från samma adress. Således innehåller facket vid varje ögonblick i tiden ett av de möjliga värdena. För att rymma facket tilldelas tillräckligt med utrymme i minnet för att rymma den största medlemmen i förbundet. Genom att använda union kan du också referera till samma minnesfält med olika namn och tolka dem som värden av olika typer.

Beskrivningen av föreningen är uppbyggd på samma sätt som beskrivningen av strukturen, men istället för nyckelordet struct används ordet union, till exempel låter facket uword tolka ett minnesfält antingen som en osignerad int, eller som en array av två element av osignerad char-typ.

(osignerad int u;

osignerad char b [2];

Beskrivningar av typer som deklareras av programmeraren, inklusive strukturer och fackföreningar, kan vara ganska stora, därför ger C / C ++ möjligheten att tilldela egennamn (synonymer) till typer, vilket ökar tydligheten i programtexter. Typnamnet synonym anges med nyckelord typedef och är konstruerad som en vanlig deklaration, men identifierare i deklaratorerna tolkas i detta fall som synonymer till de beskrivna typerna. Det är vanligt att skriva synonymer för typnamn med versaler för att skilja dem från variabla identifierare. Nedan följer några exempel på att deklarera synonymer för typnamn.

typedef struct (dubbel re, im) KOMPLEX;

typedef int * PINT;

Efter sådana deklarationer kan namnsynonymen användas som typspecifikation:

KOMPLEX ca, * pca; // typvariabel COMPLEX och en pekare till COMPLEX

PINT pi; // pekare till int

Ovanstående beskrivning av strukturer och fackföreningar motsvarar i princip deras konstruktion på C-språket. I C ++ är strukturer och fackföreningar specialfall av objektdatatyper. Mer information om detta kommer att ges när man överväger objektorienterade C++-verktyg.

2.4 Operationer och uttryck

Trots den begränsade uppsättningen av grundläggande datatyper (heltals- och reella aritmetiska data och strängliteraler) definierar C++-språket en omfattande uppsättning operationer på data, av vilka några direkt motsvarar maskininstruktioner. Som med alla programmeringsspråk används operationer för att konstruera uttryck. Ett uttryck är en sekvens av operander och operationstecken och används för att beräkna något värde.

Operanderna i ett uttryck är variabla identifierare, konstanter och strängliteraler, som är primära uttryck. Ett uttryck inom parentes anses också vara primärt. Varje operation förutsätter användningen av vissa typer av operander (heltal, reella, pekare). En tilldelningsoperator i C ++ är också ett uttryck, därför skiljer sig operander, som kan tilldelas ett nytt värde, och operander, vars värde inte kan ändras. För att en operand ska kunna tilldelas ett värde måste den ha en motsvarande minnesregion och kompilatorn måste känna till adressen till detta minne. Sådana operander kallas L-uttryck (från engelskan left -left), eftersom de kan skrivas på vänster sida av uppdragsoperatorn.

Resultatet av att utvärdera ett uttryck beror på verksamhetens prioriteringar. C ++ har ett komplext system av prioriteringar av operationer, som inkluderar 16 nivåer. Tabell 2.1 innehåller en lista över C++-operationer med en indikation på deras prioriteringar, syfte och registreringsschema.

Tabell 2.1

Prioritet

Operation tecken

Utnämning

Schema

Åtkomst till ett globalt namn eller ett namn från ett annat omfång

:: identifierare (global)
realm name:: struct_member_name

Åtkomst till en medlem av en struktur med en pekare till en struktur

pekare -> strukturnamn

strukturnamn. struct_member_name

Åtkomst till ett arrayelement

pekare [index]

Typkonvertering av det givna

typnamn (uttryck) eller (typ) uttryck

Funktionsanrop

funktion (argument)

Automatisk ökning

L-värde eller
L-värde ++

Autoreduktion

L-värde eller
L-värde--

Bit Inverting

~ heltalsuttryck

Logisk negation

Uttryck

Singel minus

Uttryck

Singel plus

Uttryck

Att få en adress

& L-värde

Avlägsna en pekare

*pekare

Tilldela dynamiskt minne

ny datatyp

Frigör minne

radera pekaren

Frigör minne för en array

radera pekaren

Storleken på detta

uttryckets storlek

Storleken på den givna typen

storlek på (typnamn)

Multiplikation

uttryck * uttryck

uttryck / uttryck

Resten av divisionen

uttryck% uttryck

Refererar till en medlem av en struktur med pekare

pekare_till_struktur -> * medlemsnamn_på_strukturpekare

Refererar till en medlem av en struktur med strukturnamnet

strukturnamn. *
member_name för pekarstrukturen

Tillägg

uttryck + uttryck

Subtraktion

uttryck - uttryck

Vänster Shift

heltalsuttryck<< целое_выражение

Växla åt höger

heltalsuttryck >> heltalsuttryck

uttryck< выражение

Mindre eller lika

uttryck<= выражение

uttryck> uttryck

Mer eller lika

uttryck> = uttryck

uttryck == uttryck

uttryck! = uttryck

Lite konjunktion

uttryck & uttryck

Förnekande av likvärdighet

uttryck ^ uttryck

Bitvis disjunktion

uttryck | uttryck

Logiskt "OCH"

uttryck && uttryck

Logiskt "ELLER"

uttryck | | uttryck

Villkorligt uttryck

uttryck? uttryck1: uttryck2

Enkelt uppdrag

uttryck = uttryck

Sammansatt tilldelning, @-tecken är ett av operationstecknen * /% + -<< >> & ^ |

uttryck @ = uttryck

Följ operationen

uttryck, uttryck

Låt oss överväga funktionerna i tillämpningen av huvudoperationerna som anges ovan.

Operationen "::" (två kolon) används för att kvalificera namnet på ett programobjekt i det fall två identiska namn är kända på denna plats i programmet, till exempel när ett namn deklareras globalt och det andra är i funktionskroppen. Om namnet föregås av två kolon, är detta det globala namnet.

För att hänvisa till medlemmarna i en struktur eller förening kan du använda antingen namnet på den strukturerade datan eller en pekare till den strukturerade datan. I det första fallet består det fullständiga medlemsnamnet av namnet på själva strukturen och namnet på strukturmedlemmen, åtskilda av en punkt. I det andra fallet placeras ett -> (pil) tecken efter namnet på pekaren till strukturen, följt av namnet på strukturelementet. Låt programmet deklarera en strukturerad typ AnyStruct som innehåller en komponent med namnet medlem av typen int och deklarera

AnyStruct s1; // Givet s1 av typen AnyStruct

AnyStruct * ps1 = // Pekare till denna AnyStruct-typ

Medlemmen av s1 kan då hänvisas till som s1.medlem eller ps1-> medlem.

Eftersom en pekare kan vara en del av strukturen, finns det i C ++ speciella operationer för att avleda en sådan pekare, operationerna * Och ->. Låt en av medlemmarna i AnyStruct-strukturen vara en pp1-pekare till den givna int-typen. Sedan kommer uttrycken s1. * Ppl och ps1 -> * pp1 att ge tillgång till datavärdet som pekas på av pp1 från s1.

Det noterades ovan att namnet på en array i C / C ++ tolkas som en konstant pekare till det första elementet i arrayen. För att härleda en pekare, dvs. operationen * (asterisk) används för att komma åt den givna av pekaren till denna givna. Därför, om en array deklareras i programmet

int Array1 [10];

sedan används uttrycket * Array1 = 0 för att tilldela ett nollvärde till det första elementet i arrayen. För att referera till ett godtyckligt element i en array måste du ange indexet för elementet, till exempel Array1. Detta uttryck är ekvivalent med * (Array1 + 3), dvs. du måste först öka pekaren Array1 med 3 enheter och sedan avreferera den resulterande pekaren. När du lägger till en pekare till ett objekt av någon typ T med ett heltal N, ökas pekarens värde med N multiplicerat med längden på den givna typen T. Observera att indexet kan specificeras inte bara för arraynamn, utan också för vilken typ av pekare som helst, förutom en pekare till tomrumstypen:

int * pint = & Array [4]; pint [2] = 1;

I det här exemplet initieras pintpekaren med adressen för det femte elementet i Array, och sedan sätts det sjunde elementet i denna array till 1.

Alla uttryck med ett heltalsvärde kan anges som ett index.

Eftersom C ++ är ett maskinskrivet språk, definierar det explicita och implicita datatypkonverteringar. Implicita omvandlingar utförs med två-ställs aritmetik och tilldelningsoperationer och kallas standardaritmetiska omvandlingar. Dessa transformationer utförs i följande sekvens:

Om en operand är av typen long double, konverteras den andra till typen long double;

Annars, om en operand är av typen dubbel, konverteras den andra till typen dubbel;

Annars, om en operand är float, konverteras den andra till float;

Annars, om en operand är av typen unsigned long int, konverteras den andra till typen unsigned long int;

Annars, om en operand är long int,> konverteras den andra till long int;

Annars utförs standardkonverteringar för heltal, medan typerna char, short int och bitfält av typen int omvandlas till typ int, om en operand har en större storlek (större värdeintervall) än den andra operanden, då operand konverteras till typen av operanden större storlek;

Annars är operanderna av typen int.

Explicit typkonvertering kan anges i två former. Den första formen är C-kompatibel, där typnamnet inom parentes följs av värdet som ska konverteras, vilket kan vara ett primärt uttryck eller ett uttryck med en enda operator. Typnamnet i det här fallet kan representeras av en sekvens av deskriptorer, till exempel (long int *) pp definierar omvandlingen av en viss pp till en pekartyp till long int. Den andra formen av typkonvertering skrivs som ett funktionsanrop, och typnamnet måste anges med en identifierare, till exempel int (x). Det bör noteras att resultatet av den explicita omvandlingen inte är ett L-värde.

Operationerna autoinkrement och autodekrement (++ och -) kan vara prefix och postfix och orsaka en ökning (minskning) av deras operand med en, dvs. uttryck ++ x är ekvivalent med x = x +1, och --x är ekvivalent med x = x - 1. Prefixoperationen utförs innan dess operand används för att utvärdera uttrycket, och postfix-operationen utförs efter dess operand används i uttryck, till exempel som ett resultat av att utvärdera ett uttryck

X * 2 + y-- * 3

variabeln x ökas först med 1 och multipliceras sedan med 2, variabeln y multipliceras först med 3, och minskas sedan med 1. Om x och y var lika med 1 innan du utvärderade uttrycket, kommer resultatet av uttrycket att vara 5, dessutom kommer variabeln x att få värdet 2, och y-variabeln är 0. Således har automatisk inkrement och autodekrementering alltid en bieffekt, de ändrar värdena på sina operander. Operanderna för dessa operationer måste vara L-värden.

~ (tilde)-operationen gäller endast för ett heltalsvärde och ersätter alla bitar i dess operand med värdet 0 med 1, och bitar med värdet 1 med 0.

Logisk negation (operation!) Returnerar ett heltalsvärde 0 om operanden inte är noll, eller 1 om operanden är noll.

Operationerna "single +" och "single -" har den vanliga matematiska betydelsen, +-tecknet ändrar inte värdet på operanden, tecknet - ändrar operandens tecken till det motsatta.

Operationen & (ampersand) används för att erhålla adressen till en L-värdesoperand. Resultatet av denna operation kommer att vara en pekare till motsvarande datatyp. Avlägsna en pekare, dvs. att erhålla värdet av en given av en pekare till den tillhandahålls av * (asterisk) operationen. Resultatet av dereferensoperationen är ett L-värde.

I C++ definieras operationer för att allokera data i dynamiskt minne och ta bort dynamiska data från minnet.

Den nya operationen kräver ett typnamn som en operand och är avsedd att placera denna specificerade typ i dynamiskt minne, resultatet av operationen kommer att vara en pekare till den givna. Om det är omöjligt att allokera minne returnerar den nya operationen NULL-värdet - en fördefinierad konstant som har ett nollvärde i nästan alla C- och C++-kompilatorer. Minnet som allokeras av den nya operationen kan initieras genom att följa skalärens typnamn med ett initialt värde inom parentes; inställning av initiala värden för dataaggregat kommer att diskuteras senare. Exempel på användning av den nya operationen:

int * ip = ny int; / * skapa ett int-objekt och få en pekare till det * /

int * ip2 = ny int (2); // samma med startvärdet satt till 2

inr * intArray = new int [10]; // array med 10 element av int-typ

dubbel ** matr = ny dubbel [m] [n]; // matris av m rader och n kolumner

Data som allokerats i dynamiskt minne av den nya operationen raderas från minnet genom raderingsoperationen med en pekoperand, vars värde erhålls genom den nya operationen, till exempel,

ta bort inArray; ta bort ip2;

Raderingsoperationen frigör bara heap-minne, men ändrar inte värdet på operandpekaren. Programmeraren måste komma ihåg att efter att ha frigjort minne kan denna pekare inte användas för att komma åt data.

Storleken på en given eller datatyp i byte kan erhållas med hjälp av operationens storlek. Operaanden kan vara av vilken typ som helst förutom funktionstypen och bitfältet. Om operanden är ett typnamn måste den omges inom parentes. Returvärdet har en fördefinierad typ size_t, det är en heltalstyp, vars storlek bestäms av kompilatorns implementering, vanligtvis motsvarar typen size_t osignerad int. Storleken på arrayen är lika med antalet byte som upptas av arrayen i minnet, storleken på strängen literal är antalet tecken i den bokstavliga +1, dvs. den avslutande nollbyten tas med i beräkningen när längden på bokstaven bestäms. Returvärdet för sizeof är konstant.

Aritmetiska operationer på två ställen för multiplikation (*), division (/), modulo (%), addition (+) och subtraktion (-) har den vanliga betydelsen och normal relativ företräde. Om operanderna för en aritmetisk operation har olika typer, utförs aritmetiska standardomvandlingar i förväg och typen av operationsresultat bestäms av den allmänna typen av operander efter standardomvandlingar. Därför kommer uttrycket 7/2 att ha värdet 3 av typen int, eftersom båda operanderna är av typen int, och uttrycket 7.0 / 2 kommer att ge resultatet 3.5 av typen dubbel, eftersom denna typ har den första operanden.

Operationer av relation mellan två uttryck (<, <=, >,> =) kräver operander av aritmetisk typ, eller så måste båda operanderna vara pekare till samma typ. När det gäller operander av aritmetisk typ, beräknas värdena för operanderna, standardaritmetiska konverteringar utförs och 1 int returneras om relationen är uppfylld (sant), eller 0 om relationen inte är uppfylld (falsk) . När två pekare jämförs beror resultatet på den relativa minnesallokeringen för de objekt som pekarna refererar till. Jämförelseoperationer (== och! =) är liknande, men med lägre prioritet.

Uttryck för relationer kan kopplas samman med logiska bindeord && (konjunktion, logisk multiplikation) och | | (disjunktion, logiskt tillägg). Generellt sett kan operanderna för logiska kopplingar vara alla skalära värden, och &&-operationen ger ett resultat lika med 1 av typen int om båda operanderna har värden som inte är noll, och | | ger resultatet 0 om värdena för båda operanderna är null. Den förkortade formen för beräkning av värdet av logiska anslutningar används, om i &&-operationen den första operanden är lika med noll, beräknas inte den andra operanden och 0 returneras, om i operationen | | den första operanden är icke-noll, sedan utvärderas inte den andra operanden och värdet 1 returneras.

Som redan nämnts betraktas tilldelningen som betecknas med =-tecknet i C / C ++ som en operation och returnerar värdet som tilldelades den vänstra operanden. Uppdraget utvärderas från höger till vänster, d.v.s. det tilldelade värdet beräknas först, sedan utförs tilldelningen. Detta låter dig skriva uttryck som x = y = z = 1 för att ställa in samma värden för flera variabler. Det är möjligt, även om detta minskar programmets tydlighet, att bygga uttryck med en bieffekt av formen (x = 2) * (y = 3) + (z = 4). Resultatet av detta uttryck blir 24, men samtidigt får variablerna x, y och z nya värden.

Förutom enkel tilldelning finns det en uppsättning sammansatta uppdragsoperationer, där uppdraget kombineras med den angivna tvåplatsoperationen. X + = y är ekvivalent med x = x + y.

Vänster och höger skiftoperationer definieras för heltalsoperander. När du utför operation e1<< e2 биты первого операнда сдвигаются влево на e1 разрядов и результат имеет тип первого операнда. Освобождающиеся правые разряды заполняются нулями. При сдвиге вправо (e1 >> e2) om e1 är av typen osignerad, fylls de lediga vänsterbitarna med nollor, och om e1 är av typen signerad, upprepas teckenbiten i de lediga vänsterbitarna.

Operationer med bitvis logisk multiplikation, logisk addition och exklusiv eller (negering av ekvivalens) är tillåtna på heltalsoperander. I dessa operationer behandlas operanderna som sekvenser av bitar och operationen utförs på varje par av motsvarande bitar från båda operanderna. Till exempel resultatet av uttrycket (x >> (p - n +1)) & (~ (~ 0<< n)) будет выделение из целого беззнакового x n битов, начиная с бита с номером p, и сдвиг выделенных битов вправо, т.е. выделение n-разрядного целого, хранящегося в машинном слове x начиная с p-го разряда.

I C / C ++ finns det en konstruktion som kallas ett villkorligt uttryck. Det villkorliga uttrycket är byggt enligt schemat:

skick? uttryck1: uttryck2

Vilket skalärt uttryck som helst kan användas som ett villkor. Om resultatet av utvärderingen av villkoret inte är noll, kommer värdet för hela uttrycket att vara expression1; om villkoret är noll bestäms värdet för hela uttrycket av expression2. Den andra och tredje operanden av det villkorliga uttrycket måste antingen vara båda aritmetiska typerna, eller av samma typstrukturer eller fackföreningar, eller pekare av samma typ, eller så är en av dem en pekare till någon typ, och den andra operanden är NULL eller har typen void *. Uttryck x> 0? 1: 0 returnerar 1 om x är större än 0 och 0 annars.

Ett uttryck kan vara en kommaseparerad sekvens av uttryck, i vilket fall alla uttryck utvärderas från vänster till höger och värdet för det sista uttrycket i listan returneras. Till exempel som ett resultat av att utvärdera uttrycket

x = 2, e * 3, x +1 får värdet 3 och längs vägen får x värdet 2. Resultatet av multiplikationen e * 3 kan inte användas på något sätt.

2,5 C++-operatorer

Operatörer är syntaktiska konstruktioner som definierar åtgärder som ska utföras av ett program. Följande typer av operatorer är tillgängliga i C / C ++: uttrycksoperatorer, urvalsoperatorer, loopoperatorer och hoppoperatorer. Syntaxen för vissa operatorer innehåller uttryck som spelar rollen som villkor, beroende på uppfyllelsen eller icke-uppfyllelsen av vilken en eller annan sekvens av åtgärder som väljs. Eftersom det inte finns några booleska uttryck i C används alla uttryck som ger skalära värden som villkor, och villkoret anses vara sant om detta värde inte är noll, och ouppfyllt om det är lika med noll. Flera påståenden kan kombineras till ett sammansatt påstående genom att omsluta dem med krulliga (påstående) klammerparenteser. Operatörens slut (förutom sammansatt operatör) är ett semikolon, som i det här fallet är en del av operatorn.

Varje operator kan föregås av en etikett i form av en identifierare, separerad från operatorn för att markeras med ett kolon. Etiketten tjänar bara till att indikera det i hoppsatsen.

Den enklaste är uttrycksoperatorn, som är ett komplett uttryck som slutar med ett semikolon, till exempel

x = 3; y = (x +1) * t; i ++;

Ett uttryck formaterat som en operator utvärderas, men dess värde går förlorat, och åtgärden av operatoruttrycket består av bieffekter som följer med utvärderingen, till exempel när man utför tilldelning, autoinkrement och autodekrementering.

Urvalsoperatorer i C / C ++ representeras av en villkorlig operator och en switch. Den villkorliga operatorn liknar villkorliga operatorer i andra programmeringsspråk och kan användas i stenografi och fullständiga formulär som scheman motsvarar:

if (villkorligt uttryck) uttalande

if (villkorligt uttryck) statement-1 else statement-2

I den förkortade formen av en villkorlig operator utvärderas det villkorliga uttrycket och, om dess värde inte är noll, exekveras operatorn som följer villkoret, annars vidtas ingen åtgärd.

Liknande dokument

    En analys av objektorienterad programmering som efterliknar hur saker görs. Grundläggande principer för objektorienterad programmering: inkapsling, arv, polymorfism. Begreppet klasser, fält, metoder, meddelanden, händelser.

    test, tillagt 2013-01-22

    Använda ett skriptspråk för att utveckla webbapplikationer (skript). Lär dig grunderna i objektorienterad programmering i PHP-språk... Bekantskap med speciella metoder för att arbeta med klasser. Syfte med gränssnitt.

    test, tillagt 2015-03-14

    Allmänna egenskaper hos det objektorienterade förhållningssättet till programmering, dess grundläggande egenskaper och principer. Utveckling av ett program för att automatisera verksamheten på ett café baserat på ett objektorienterat tillvägagångssätt, design och implementering av ett dataschema.

    Terminuppsats tillagd 2012-01-22

    Karakteristika och egenskaper hos programmeringsspråk. Studie av utvecklingen av objektorienterade programmeringsspråk. Att bygga en evolutionär karta över OOP-mekanismer. Utveckling av konceptuell modell hur användargränssnittet fungerar.

    Terminsuppsats tillagd 2014-11-17

    Använda objektorienterad programmering - bra beslut vid utveckling av stora mjukvaruprojekt. Objekt och klass som grund för ett objektorienterat språk. Begreppet objektorienterade språk. Språk och mjukvarumiljö.

    test, tillagt 2011-01-17

    Studiet av principerna för objektorienterad programmering, där de grundläggande begreppen är begreppen klasser och objekt. Egenskaper för denna typ av programmering: inkapsling, polymorfism, arv. Klassbeskrivning. Konstruktörer och destruktörer.

    presentation tillagd 2013-10-14

    Skapande av mjukvara - simuleringssystem på ämnet "Produktionslinje med tekniska kontrollpunkter". Beskrivning av in- och utdata. Objektorienterad programmering. Diagram över moduler och processer.

    terminsuppsats, tillagd 2014-09-01

    Egenskaper för ett objektorienterat programmeringsspråk. Inkapslings- och arvskoncept. Virtuella funktioner och polymorfism. Initiera en instans av ett objekt med hjälp av en konstruktor. Dynamiskt skapande föremål. Objekttypskompatibilitet.

    sammandrag tillagt 2015-04-15

    Konceptet med en algoritm och dess egenskaper som ett grundläggande programmeringselement. Former för presentation av algoritmer, grundläggande algoritmiska strukturer. Strukturerad och händelsedriven programmering. Objektorienterad programmering.

    abstrakt, tillagt 2008-07-17

    Programutveckling med hjälp av principerna för objektorienterad programmering i språket hög nivå Med hjälp av Microsoft Visual Studio 2010. Bygga en implementeringsalgoritm. Programklass, instruktioner för användning av programmet.

Ufa State Aviation Technical University

Institutionen för beräkningsteknik

och informationsskydd

Förklarande anteckning

till terminsuppsats

efter disciplin: "Programmeringsmetoder och tillämpade algoritmer"

"Utveckling av en tillämpad algoritm och dess implementering i C++"

Görs av en elev:

Zaguraev A.N.

Fakultet: IRT

Grupp: ZI-225

Mottaget av docent, kandidat för tekniska vetenskaper:

Strokina Yu.G.

1. Redogörelse för problemet ………………………………………………………………… 3

2. Borland C ++ Builder programmeringsmiljö ………………… ..4

3. Programvara …………………………………. ………… 10

4. Utveckling av programalgoritmen i form av ett flödesschema ……. …… 11

5. Beskrivning av programmet ………………………………………… .12

6. Slutsatser ………………………………………………………………………… .15

7. Lista över använd litteratur …………………………………… .16

Bilaga …………………. ………………………………… .. ………………… ..17

Formulering av problemet

Träning: Utveckla ett program för iterativ sökning efter storleken på enhetliga lånebetalningar. Betalningar och upplupna räntor på resterande belopp görs månadsvis. Inledande data: lånestorlek, återbetalningstid (från 1 till 5 år), ränta. I dialogrutan, visa grafen över förändringen i saldot på lånebeloppet.

ProgrammeringsmiljöBorlandC++ Byggare

Introduktion

Borland C ++ Builder är en miljö för snabb applikationsutveckling. Snabbutvecklingssystem (RAD-system, Rapid Application Development) är baserade på teknologin visuell design och händelsedriven programmering, vars essens är att utvecklingsmiljön tar över det mesta av arbetet med att generera programkoden, vilket ger programmeraren att arbeta med att designa dialogrutor och skriva händelsehanteringsfunktioner. Programmerarens produktivitet vid användning av RAD-system ökar avsevärt.

Objektorienterat programmeringssystem Borland C ++ Builder, designat för Windows operativsystem. C++ Builder IDE levererar snabb visuell utveckling, produktivitet hos återanvändbara komponenter, kombinerat med kraften hos C++ språkverktyg, avancerade verktyg och flerskalig databastillgänglighet.

C ++ Builder kan användas varhelst det behövs för att komplettera befintliga applikationer med en utökad C++ språkstandard, förbättra prestanda och ge användargränssnittet professionell kvalitet.

Visuell utvecklingshastighet

Professionella C++ språkverktyg är integrerade i den visuella utvecklingsmiljön. C++ Builder tillhandahåller en snabb Borland C++-kompilator, en effektiv inkrementell loader och flexibla felsökningsverktyg på både käll- och monteringsnivå för att möta de krävande kraven från professionella programmerare.

Dra-och-släpp-design låter dig skapa en applikation genom att helt enkelt dra och släppa visuella komponenter som fångas med musen från paletten till ansökningsformuläret. Objektinspektören ger möjlighet att arbeta med komponenters egenskaper och händelser, och skapar automatiskt mallar för händelsehanteringsfunktioner som fylls med kod och redigeras under utvecklingen.

Egenskaper, metoder och händelser är just de delar av språket som möjliggör snabb applikationsutveckling inom objektorienterad programmering. "Egenskaper" låter dig enkelt ställa in olika egenskaper hos objekt. "Metoder" utför vissa, ibland ganska komplexa, operationer på ett objekt. "Händelser" associerar användarens åtgärder på objekt med svarskoderna för dessa åtgärder. Händelser kan tas upp för specifika förändringar i objekts tillstånd, till exempel uppdatering av data i databasåtkomstgränssnitt. Egenskaper, metoder och händelser samverkar för att skapa en RAD-miljö (Rapid Application Development) för att snabbt och intuitivt programmera robusta Windows-applikationer.

Visuell formärvning förkroppsligar en viktig aspekt av objektorienterad programmering i ett lättanvänt visuellt designverktyg. Egenskaperna hos det nya ansökningsformuläret kan ärvas från vilket annat befintligt formulär som helst, vilket ger en centraliserad reproduktion av ändringar i användargränssnittet, underlättar kodkontroll och minskar tiden det tar att introducera nya kvalitetsattribut.

Installationsguiden vägleder skapandet av enhetliga distributionspaket för de utvecklade applikationerna.

Källkoden för Visual Component Library underlättar utvecklingen av nya komponenter baserat på färdiga exempel.

Öppna API-verktyg kan integreras direkt i systemets visuella miljö. Du kan ansluta en bekant textredigerare eller skapa din egen guide för att automatisera repetitiva procedurer.

Det utökade matematikbiblioteket innehåller ytterligare enhetliga statistiska och finansiella datorfunktioner.

GränssnittBorlandC++ Byggare.

C ++ Builder-gränssnittet inkluderar:

Komponentpalett innehåller över 100 återanvändbara komponenter som erbjuds för byggnadsapplikationer.

Formulärredigerare utformad för att skapa ett programgränssnitt med en användare.

Redaktör koda avsedd för att skriva programtext, i synnerhet händelsehanteringsfunktioner.

Objektinspektör låter dig visuellt ställa in objekts egenskaper utan behov av rutinprogrammering och innehåller händelser som kan associeras med koder för objekts reaktion på deras förekomst.

Objektlagring innehåller objekt som formulär och datamoduler som delas av många applikationer för att minska utvecklingstiden.

C ++ Builder implementerar en visuell teknik för att bygga applikationer genom att välja nödvändiga kontroller från komponentpaletten (fig. 1). Varje komponent (som en knapp) har egenskaper kopplade till sig som ändrar dess utseende och beteende. Vilken komponent som helst kan utlösa en serie händelser som bestämmer dess svar på olika stimuli.

Kompatibilitetsproblem

C ++ Builder ger kraften och rikedomen i C ++-språket till hela familjen av objektorienterade programmeringssystem. C ++ Builder kan användas överallt där du vill utöka befintliga applikationer med ett utökat industristandard C++-språk, förbättra prestanda och ge användargränssnittet ett professionellt utseende.

C ++ BuilderochBorland C++

Det finns fullständig och ömsesidig interoperabilitet mellan mjukvaruprodukterna C++ Builder och Borland C++. C ++ Builder tillför en ny kvalitet till programmeringsprocessen - snabb visuell utveckling av applikationer i C++-språket. Om du är van vid att arbeta i Borland C++ programmeringssystem (versionerna 3.1, 4.5 och 5.0), så kommer det inte att vara för svårt att byta till ett nytt system eller återgå till ett gammalt. Du har en bekväm projektfilhanterare, kompilator och inkrementell loader till ditt förfogande.

Till en början kommer C ++ Builder att göra många utvecklare besvikna att istället för de vanliga OWL- och MFC-biblioteken använder den det tidigare okända VCL-biblioteket. Varje bibliotek representerar en specifik objektorienterad programmeringsmodell för Windows. Varje bibliotek löser OOP-problem på sitt eget sätt och man kan inte säga att man klarar uppgiften bättre eller sämre än andra Borland C++ versioner 5.0 och högre stödjer införandet av standardformulär designade i C++-miljön i tidigare utvecklade OWL- eller MFC-program Byggare baserad på VCL. Utvecklaren går till den här typen av ändringar av en enkel anledning: C ++ Builder låter dig inkludera alla dialoger med användaren i formuläret extremt snabbt, vilket ger Windows-applikationen ett komplett professionellt utseende, tar bort allt skal med hjälpkod från program och lämnar bara den meningsfulla delen som förkroppsligar huvudidén med algoritmen. På så sätt säkerställs kompatibilitet på formulärnivå. Inte överraskande ökar storleken på EXE-filen avsevärt genom att arbeta tillsammans med de två objektklassbiblioteken.







2021 gtavrl.ru.