V padesátých letech dvacátého století, s příchodem počítačů s elektronkami, začal rychlý rozvoj programovacích jazyků. Počítače, které byly v té době výrazně dražší než vývoj jakéhokoli programu, vyžadovaly vysoce efektivní kód. Takový kód byl vyvinut ručně v jazyce Assembly. V polovině 50. let pod vedením Johna Backuse algoritmický programovací jazyk FORTRAN. Navzdory skutečnosti, že již existoval vývoj jazyků, které převádějí aritmetické výrazy do strojového kódu, počátečním bodem se stalo vytvoření jazyka FORTRAN (FORmula TRANslator), který poskytuje schopnost psát algoritmus výpočtu pomocí podmíněných operátorů a I / O operátorů éry algoritmických programovacích jazyků.

K vytvoření vysoce efektivního kódu byl vyžadován jazyk FORTRAN. Proto byla řada jazykových konstrukcí původně navržena s ohledem na architekturu IBM 407. Úspěch vývoje tohoto jazyka vedl k tomu, že výrobci jiných počítačových systémů začali vytvářet své vlastní verze překladačů. S cílem dosáhnout v té době možného sjednocení jazyka se FORTRAN IV vyvinutý v roce 1966 stal prvním standardem s názvem FORTRAN 66.

ALGOL (ALGOrithmic Language) byl vyvinut pod vedením Petera Naura na konci 50. let jako alternativa k FORTRANU, který byl původně orientován na architekturu IBM. Hlavním cílem sledovaným vývojáři tohoto jazyka byla nezávislost na specifické architektuře výpočetního systému. Tvůrci jazyka ALGOL se navíc snažili vyvinout jazyk vhodný pro popis algoritmů a používání systému zápisu blízkého systému používanému v matematice.

Prvními cílovými jazyky byly jazyky FORTRAN a ALGOL programování výpočty.

PL 1, jehož první verze se objevila na počátku 60. let, byla původně zaměřena na IBM 360 a rozšířila možnosti FORTRANu o některé funkce jazyka COBOL vyvinuté během stejných let. Navzdory určité popularitě jazyka PL / I mezi programátory, kteří pracovali na počítačích a strojích IBM řady EU, je v současné době čistě teoretický.

Na konci 60. let byla Simula-67 vyvinuta pod vedením Nyarda a Dahla pomocí konceptu uživatelem definovaných datových typů. Ve skutečnosti je to první jazyk, který používá koncept tříd.

V polovině 70. let navrhl Wirth jazyk Pascal, který se okamžitě stal široce používaným. Zároveň z iniciativy amerického ministerstva obrany začaly práce na vytvoření jazyka na vysoké úrovni s názvem Ada - na počest programátorky a dcery lorda Byrona Ady Lovelaceové. Tvorba jazyka začala definováním požadavků a vývojem specifikací. Na projektu pracovali čtyři nezávislé týmy, ale všechny jako základ používaly Pascal. Na začátku 80. let byl vyvinut první průmyslový překladač pro jazyk Ada.

Univerzální programovací jazyk C vyvinuli v polovině 70. let Denis Ritchie a Ken Thompson. Tento jazyk se stal populárním programovacím jazykem systému a najednou se používal k psaní jádra operačního systému UNIX. Standard jazyka C byl vyvinut pracovní skupinou ANSI Standards Institute v roce 1982. Mezinárodní standard pro jazyk C byl přijat v roce 1990. Jazyk C tvořil základ pro vývoj programovacích jazyků C ++ a Java.

Spolu s algoritmickými jazyky se paralelně vyvíjely jazyky určené ke zpracování obchodních informací i jazyky umělé inteligence. První zahrnuje COBOL (COmmon Business Oriented Language) a druhý zahrnuje LISP (LISt Processing) a Prolog. LISP, vyvinutý v šedesátých letech pod vedením J. McCarthyho, byl prvním funkčním jazykem pro zpracování seznamu, který se v teorii her široce používá.

S příchodem osobních počítačů se jazyky staly nedílnou součástí integrovaného vývojového prostředí. Existovaly jazyky používané v různých kancelářských programech, například VBA (Visual Basic for Application).

V 90. letech se s rozšířením internetu rozšiřuje možnost distribuovaného zpracování dat, což se odráží ve vývoji programovacích jazyků. Existují jazyky zaměřené na vytváření serverových aplikací, jako jsou Java, Perl a PHP, jazyky pro popis dokumentů - HTML a XML. Změny procházejí také tradiční programovací jazyky C ++ a Pascal: programovací jazyk začíná znamenat nejen funkčnost samotného jazyka, ale také knihovny tříd poskytované programovacím prostředím. Důraz od specifikace samotných programovacích jazyků se přesouvá na standardizaci mechanismů pro interakci distribuovaných aplikací. Objevují se nové technologie - COM a CORBA, specifikující interakci distribuovaných objektů.

Rozsah programovacích jazyků

V současné době se programovací jazyky používají v nejrůznějších oblastech lidské činnosti, například:

  • vědecké výpočty (jazyky C ++, FORTRAN, Java);
  • programování systému (jazyky C ++, Java);
  • zpracování informací (jazyky C ++, COBOL, Java);
  • umělá inteligence (LISP, Prolog);
  • vydavatelství (Postscript, TeX);
  • vzdálené zpracování informací (Perl, PHP, Java, C ++);
  • popis dokumentů (HTML, XML).

V průběhu doby se některé jazyky vyvinuly, získaly nové funkce a zůstaly v poptávce, jiné ztratily svůj význam a dnes jsou v nejlepším případě čistě teoretickým zájmem. To je do značné míry způsobeno faktory, jako jsou:

  • přítomnost programovacího prostředí, které podporuje vývoj aplikací ve specifickém programovacím jazyce;
  • snadná údržba a testovací programy;
  • náklady na vývoj pomocí konkrétního programovacího jazyka;
  • jasnost a ortogonalita jazykových konstrukcí;
  • aplikace objektově orientovaného přístupu.

Než se chcete naučit programovací jazyk, musíte vědět něco o jejich historii a o tom, kde jsou použity.

Představuji vám přehled 25 slavných programovacích jazyků. Od nejslavnějších po nejméně populární. Článek je určen pro začátečníky v oblasti programování. Můžete si přečíst o každém jazyce a vybrat si ten, který se vám nejvíc líbí pro učení.

Než se začnete učit programovací jazyky, doporučuji si tento kurz prostudovat.

1. JavaScript

Prototypově orientovaný skriptovací jazyk. JavaScript byl původně vytvořen, aby byly webové stránky „živé“. V prohlížeči se připojují přímo k HTML a jakmile se stránka načte, jsou okamžitě provedeny.

Když byl vytvořen JavaScript, měl původně jiný název: „LiveScript“. Ale potom byl jazyk Java velmi populární a obchodníci se rozhodli, že podobný název učiní nový jazyk populárnějším.

Bylo plánováno, že JavaScript bude pro Javu jakýmsi „malým bratrem“. Historie se však rozhodla svým vlastním způsobem, JavaScript se hodně rozrostl a nyní je to zcela nezávislý jazyk s vlastní specifikací a nemá nic společného s Javou.

2. Java


Silně typovaný objektově orientovaný programovací jazyk. Java aplikace se obvykle překládají do speciálního bajtkódu, takže je možné je spustit na libovolné počítačové architektuře pomocí Java Virtual Machine.

Výhodou této metody provádění programů je úplná nezávislost bytecode na operačním systému a hardwaru, což vám umožňuje spouštět aplikace Java na jakémkoli zařízení, pro které existuje odpovídající virtuální stroj. Další důležitou vlastností technologie Java je flexibilní bezpečnostní systém, v jehož rámci je provádění programu zcela řízeno virtuálním strojem.

Jazyk, který se původně jmenoval Oak, vyvinul James Gosling pro programování spotřebních elektronických zařízení. Později byl přejmenován na Java a byl používán k psaní klientských aplikací a serverového softwaru.

3. PHP


Je to běžný open source univerzálně interpretovaný jazyk (skriptovací jazyk). PHP bylo vytvořeno speciálně pro vývoj webových aplikací a kód na něm lze vložit přímo do kódu HTML. Syntaxe jazyka pochází z jazyka C, Javy a Perlu a lze jej snadno naučit.

Hlavním cílem PHP je poskytnout webovým vývojářům možnost rychle vytvářet dynamicky generované webové stránky, ale PHP se na to neomezuje.

4. Python

Univerzální programovací jazyk na vysoké úrovni zaměřený na zlepšení produktivity vývojářů, čitelnosti kódu a vývoje webových aplikací. Syntaxe jádra Pythonu je minimalistická. Pythonský kód je uspořádán do funkcí a tříd, které lze kombinovat do modulů.

5. C #


Objektově orientovaný programovací jazyk. Vyvinuto v letech 1998-2001 skupinou inženýrů vedených Andersem Hejlsbergem ve společnosti Microsoft jako jazyk pro vývoj aplikací pro platformu Microsoft .NET Framework. C # patří do rodiny jazyků se syntaxí podobnou C, jejíž syntaxe je nejblíže C ++ a Javě.

Jazyk je staticky typizovaný, podporuje polymorfismus, přetížení operátorů, delegáty, atributy, události, vlastnosti, obecné typy a metody, iterátory, anonymní funkce s podporou uzavření, LINQ, výjimky, komentáře XML.

6. C ++


Zkompilovaný, staticky napsaný univerzální programovací jazyk. Je to jeden z nejvíce mluvených jazyků na světě. Google Chrome, Mozilla Firefox, Winamp a produktová řada Adobe byly vyvinuty v jazyce C ++. Některé moderní hry a operační systémy byly navíc vyvinuty v C ++ kvůli jejich rychlému zpracování a rychlosti kompilace.

7. Ruby


Jednoduchý a čitelný programovací jazyk zaměřený na vývoj webových aplikací. Navrhl Yukihiro Matsumto v roce 1995. Jazyk má implementaci vícevláknového procesu nezávislou na operačním systému, silné dynamické psaní a sběrač odpadků.

Hlavním účelem Ruby je vytvářet jednoduché a zároveň srozumitelné programy, kde není důležitá rychlost programu, ale krátká doba vývoje, jasnost a jednoduchost syntaxe. Jazyk se řídí zásadou „nejmenšího překvapení“: program by se měl chovat tak, jak programátor očekává.

8. CSS


Kaskádové šablony stylů (kaskádové šablony stylů) formální jazyk popisující vzhled dokumentu napsaného pomocí značkovacího jazyka.
Používá se hlavně jako prostředek k popisu a zdobení vzhledu webových stránek napsaných pomocí značkovacích jazyků HTML a XHTML, ale lze jej použít i na jakékoli dokumenty XML.

9.C


Zkompilovaný, staticky napsaný univerzální programovací jazyk. Jazyk C vyvinul Dennis Ritchie v roce 1972 v Bell Labs. Je předchůdcem programovacích jazyků, jako jsou C ++, Java, C #, JavaScript a Perl. Z tohoto důvodu učení tohoto jazyka vede k porozumění i dalším jazykům. Jazyk C se používá pro vývoj aplikací na nízké úrovni, protože je považován za nejblíže jazyku hardwaru.

10. Cíl-C


Zkompilovaný objektově orientovaný programovací jazyk používaný společností Apple Corporation, postavený na paradigmatech jazyka C a Smalltalk. Jazyk Objective-C je nadmnožinou jazyka C, takže kód C je kompilátoru Objective-C zcela srozumitelný. Jazyk se používá především pro Mac OS X (Cocoa) a GNUstep - implementace objektově orientovaného rozhraní OpenStep. Jazyk se také používá pro iOS (Cocoa Touch).

11. Shell

Není to tolik jazyk jako příkazový tlumočník (příkazový jazyk). Jeho skripty se používají k automatizaci aktualizací softwaru. Obsahuje standardní konstrukce pro smyčky, větvení, deklarace funkcí. V rodině operačních systémů kompatibilních s UNIX se SHELL používá jako standardní jazyk řízení úloh.

12. R.


Programovací jazyk pro statistické zpracování dat a grafiku a bezplatné výpočetní prostředí s otevřeným zdrojovým kódem v rámci projektu GNU. R je široce používán jako statistický software pro analýzu dat a stal se de facto standardem pro statistické programy. R používá rozhraní příkazového řádku.

13. Perl


Dynamický programovací jazyk na vysoké úrovni pro všeobecné účely. Název jazyka je zkratka, která znamená Praktický extrakční a reportovací jazyk - „praktický jazyk pro extrakci a vykazování dat“. Za hlavní vlastnost jazyka se považují jeho bohaté možnosti pro práci s textem, včetně práce s regulárními výrazy, zabudovanými do syntaxe. V současné době se používá k provádění celé řady úkolů, včetně správy systému, vývoje webových aplikací, programování sítí, her, bioinformatiky a vývoje grafického uživatelského rozhraní.

14. Scala


Multiparadigmový programovací jazyk navržený tak, aby byl stručný a typově bezpečný pro snadné a rychlé vytváření komponentního softwaru, kombinující funkční a objektově orientované programovací schopnosti. Scala - Programy se hodně podobají programům Java a mohou volně komunikovat s kódem Java.

15. Jdi


Zkompilovaný vícevláknový programovací jazyk vyvinutý společností Google. Go byl navržen jako systémový programovací jazyk pro vytváření vysoce efektivních programů, které běží na moderních distribuovaných systémech a vícejádrových procesorech. Lze to považovat za pokus vytvořit náhradu za jazyk C. Během vývoje byla věnována zvláštní pozornost zajištění vysoce efektivní kompilace. Programy Go jsou kompilovány do objektového kódu a nevyžadují ke spuštění virtuální stroj.

16. SQL

Strukturovaný dotazovací jazyk. formální neprocesní programovací jazyk používaný k vytváření, úpravám a manipulaci s daty v libovolné relační databázi spravované odpovídajícím systémem správy databáze. SQL je primárně jazyk logiky informací navržený k popisu, úpravám a načítání dat uložených v relačních databázích. Každý příkaz SQL je buď požadavkem na data z databáze, nebo voláním do databáze, které mění data v databázi.

17. Haskell


Standardizovaný čistě funkční univerzální programovací jazyk. Je to jeden z nejběžnějších programovacích jazyků s podporou odloženého výpočtu. Charakteristickým rysem jazyka je jeho seriózní přístup k psaní na stroji. Haskell je vynikající jazyk pro učení a experimentování se složitými funkčními datovými typy.

18. Swift


Otevřený multiparadigmový kompilovaný univerzální programovací jazyk. Navrženo společností Apple primárně pro vývojáře iOS a OS X. Swift pracuje s rámci Cocoa a Cocoa Touch a je kompatibilní s běžnou základnou kódů Objective-C společnosti Apple. Swift byl koncipován tak, aby byl lépe čitelný a robustnější vůči programátorským chybám než jeho předchůdce Objective-C. Swift si z Objective-C hodně půjčuje, ale není to definováno ukazateli, ale typy proměnných, které kompilátor zpracovává. Mnoho skriptovacích jazyků funguje podobným způsobem.

19. Matlab


Interpretovaný programovací jazyk na vysoké úrovni, který zahrnuje maticové datové struktury, širokou škálu funkcí, integrované vývojové prostředí, objektově orientované schopnosti a rozhraní k programům napsaným v jiných programovacích jazycích. V MATLABu jsou napsány dva typy programů - funkce a skripty. Funkce mají vstupní a výstupní argumenty a také vlastní pracovní prostor pro ukládání průběžných výsledků výpočtů a proměnných. Skripty sdílejí společný pracovní prostor. Skripty i funkce se ukládají jako textové soubory a dynamicky se kompilují do strojového kódu.

20. Visual Basic


Programovací jazyk a integrované vývojové prostředí softwaru vyvinuté společností Microsoft Corporation. Visual Basic zdědí ducha, styl a syntaxi svého předchůdce BASIC, který má mnoho dialektů. Visual Basic současně kombinuje postupy a prvky objektově orientovaných a komponentově orientovaných programovacích jazyků.

Visual Basic je také dobrým nástrojem pro rychlý vývoj databázových aplikací RAD pro operační systémy Microsoft Windows. Mnoho hotových komponent dodávaných s prostředím je navrženo tak, aby pomohlo programátorovi okamžitě začít rozvíjet obchodní logiku aplikace, aniž by rozptylovalo jeho pozornost psaním spouštěcího kódu programu.

21. Delphi


Nezbytný strukturovaný objektově orientovaný programovací jazyk se silnými staticky zadanými proměnnými. Hlavní oblastí použití je psaní aplikačního softwaru.

Dnes je spolu s podporou vývoje 32 a 64bitových programů pro Windows implementována možnost vytvářet aplikace pro Apple Mac OS X i pro Google Android (přímo spustitelný na procesoru ARM).

22. Groovy


Objektově orientovaný programovací jazyk vyvinutý pro platformu Java jako doplněk jazyka Java s funkcemi Python, Ruby a Smalltalk. Groovy používá syntaxi podobnou Javě s dynamickou kompilací do bytecode JVM a pracuje přímo s dalším Java kódem a knihovnami. Jazyk lze použít v jakémkoli projektu Java nebo jako skriptovací jazyk.

23. Visual Basic .NET


Objektově orientovaný programovací jazyk, který lze považovat za další kolo evoluce jazyka Visual Basic implementované na platformě Microsoft .NET. VB.NET není zpětně kompatibilní s dřívější verzí (Visual Basic 6.0). Vývoj projektů starých verzí (* .vbp) je možný pouze po jejich předběžném převodu do formátu VB.NET pomocí zvláštního průvodce (Průvodce migrací); po převodu však vyžaduje významnou manuální revizi textů.

24. den

Multiparadigm zkompilovaný programovací jazyk vytvořil Walter Bright z Digital Mars. D byl původně koncipován jako reengineering jazyka C ++, navzdory významnému vlivu C ++ však není jeho variantou. Jazyk byl také ovlivněn koncepty z programovacích jazyků Python, Ruby, C #, Java, Eiffel.

25. Assembler


Nízkoúrovňový strojově orientovaný jazyk s pokyny, které ne vždy odpovídají pokynům stroje, což může poskytnout další funkce, jako jsou makra; autocode, rozšířený o konstrukce programovacích jazyků na vysoké úrovni, jako jsou výrazy, makra, prostředky zajišťující modularitu programu.

Assembly language je notační systém používaný k reprezentaci programů napsaných ve strojovém kódu v čitelné formě. Jazyk sestavení umožňuje programátorovi používat abecední mnemotechnické kódy operací, přiřazovat symbolické názvy registrům počítače a paměti podle svého uvážení a také nastavit pohodlná schémata adresování. Kromě toho vám umožňuje používat různé číselné systémy k reprezentaci číselných konstant a umožňuje označit řádky programu štítky se symbolickými názvy, aby k nim bylo možné přistupovat.

Nebral jsem všechny jazyky. mezi profesionálními programátory nejsou tolik žádané. Můj úkol je dokončen, nyní stačí zvolit vhodný jazyk a dobýt ho. Hodně štěstí ve vašem úsilí.

Většina moderních počítačových programů je psána pomocí jazyků vyšší úrovně. Je pozoruhodné, že mnoho z nich bylo vyvinuto již v 60. a 70. letech, ale stále jsou relevantní i dnes. Jaké další fakty o jazycích vysoké úrovně si můžeme všimnout? Jaké jsou nejběžnější typy řešení shody?

Podstata programovacích jazyků na vysoké úrovni

Programovací jazyk na vysoké úrovni je nástroj, který patří do kategorie strojově nezávislých. Co to znamená? Jde o to, že programovací jazyky spadají do několika kategorií.

Existuje strojový kód: sada algoritmů, které jsou určeny k přímému ovládání uživatele pomocí hardwarových prvků počítače. Jejich podstata bude zcela závislá na stroji: pro určité typy počítačů jsou vhodné pouze určité algoritmy.

Existují montážní jazyky. Ve skutečnosti jde o nadstavbu nad těmi, které jsou navrženy pro nízkoúrovňové řízení hardwarových komponent počítače pomocí strojového kódu. Ale v mnoha ohledech jsou montážní jazyky také běžně označovány jako strojově závislé. Zpravidla jsou přizpůsobeny určitému typu hardwarové komponenty počítače. Jejich hlavním úkolem je usnadnit uživateli ovládání počítače prostřednictvím vhodné komunikace na nízké úrovni.

Programovací jazyk na vysoké úrovni zase umožňuje uživateli komunikovat s PC bez ohledu na to, jaké konkrétní zařízení je v počítači nainstalováno. Proto by měl být klasifikován jako strojově nezávislý. Při psaní operačních systémů se nejčastěji používá programovací jazyk na vysoké úrovni. Existují ale OS, které jsou napsány v assembleru. Lze použít současně nízké i vysoké programovací jazyky. Osoba, která dává PC příkazy na vysoké úrovni, je musí tak či onak předat konkrétním hardwarovým komponentám a tuto funkci lze implementovat pomocí montážních jazyků současně s jazyky na vysoké úrovni, které jsou zapojeny do struktury operační systém.

Překladatelé

Nejdůležitějšími prvky, které vstupují do programovacích jazyků na vysoké úrovni, jsou překladatelé. Jejich funkce může být odlišná. Mezi klíčové oblasti použití překladačů patří „překlad“ instrukcí vygenerovaných v programovacím jazyce vysoké úrovně do strojového kódu, který je srozumitelný pro konkrétní hardwarovou součást PC, například pro procesor. Překladatelům provádějícím tuto funkci se také říká překladače. Existuje další druh odpovídající komponenty - tlumočníci. Jsou určeny k tomu, aby „překládaly“ příkazy na vysoké úrovni do těch, které jsou srozumitelné operačnímu systému nebo jakémukoli programu.

Klasifikace jazyků vyšší úrovně

Programovací jazyky na vysoké úrovni lze kategorizovat z různých důvodů. Schéma je rozšířené, podle kterého jsou rozděleny do následujících hlavních odrůd:

Procedurálně orientovaný (používá se jako nástroj při zpracování informací v jakékoli fázi výpočtů);

Problémově orientovaný (používá se jako prostředek k řešení průmyslu a aplikovaných problémů vzniklých při rozšiřování rozsahu PC aplikací);

Objektově orientované (mohou to být speciální případy prvních dvou typů jazyků, jsou však přizpůsobeny pro použití širokou škálou vývojářů s různými úrovněmi dovedností, například jako řešení s vizuálním rozhraním).

Zvažte nyní některé z historických a moderních programovacích jazyků na vysoké úrovni, které odpovídají této klasifikaci.

Procedurálně orientované jazyky

Patří mezi ně Fortran. Je považován za první programovací jazyk na vysoké úrovni určený pro široké použití. Vyznačuje se jednoduchou strukturou. BASIC je také procedurální jazyk. Je považován za jeden z nejčastěji používaných ve výuce programování. Příkladem dalšího procedurálně orientovaného jazyka je C. Původně byl vytvořen pro operační systém UNIX. Na jeho základě byl následně vytvořen jazyk C ++, doplněný objektově orientovanými programovacími nástroji. Dalším jazykem, který patří do této kategorie, je Pascal. Často se také používá při výuce programování. Schopnosti tohoto jazyka umožňují jeho použití jako velmi výkonného nástroje pro vývoj profesionálních typů softwaru.

Problémově orientované jazyky

Patří mezi ně Lisp, Prologue. První jazyk byl vyvinut v roce 1962 - několik let po vzniku Fortranu. Je proto považován za druhý v historii. Aktivně byl používán jako nástroj pro programátory pro práci s řetězci znaků. V praxi se Lisp používal v systémech klasifikovaných jako expertní i v systémech určených pro analytické výpočty. Prolog našel široké uplatnění v oblasti logického programování. V praxi se nejčastěji používá při správě algoritmů umělé inteligence v příslušných systémech.

Objektově orientované jazyky

Pojďme si nyní prostudovat příklady programovacích jazyků na vysoké úrovni, které patří do kategorie objektově orientovaných. Patří mezi ně Visual Basic, Delphi, Visual Fortran, C ++ uvedené výše a Prolog ++. Ve skutečnosti všechny obsahují jádro procedurálně orientovaných jazyků. Předpokládá se však, že budou významně doplněny vizuálními ovládacími prvky, aby vývojáři, kteří jsou zvyklí na jiné nástroje, dále zvládli potřebné algoritmy. Tedy první programovací jazyk na vysoké úrovni - Fortran - se mohou IT specialisté rychle naučit pomocí schopností Visual Fortran. Podobným způsobem můžete rychle zvládnout Basic nebo Prologue.

Provádí se naopak při použití programování Delphi v jazyce Object Pascal na vysoké úrovni. Existuje mnoho dalších prostředí pro vývoj softwaru klasifikovaných jako objektově orientované jazyky. Tato oblast technologií pro vývoj softwaru se aktivně rozvíjí.

Fortran a Lisp - první a druhý jazyk na vysoké úrovni

Podívejme se blíže na to, jak se objevil první programovací jazyk na vysoké úrovni, Fortran, a také Lisp, který je považován za druhý. V roce 1954 vytvořili vývojáři z IBM pod vedením Johna Backuse jazyk, pomocí kterého mohli programátoři významně usnadnit interakci s PC, který se do té doby uskutečňoval pomocí strojových instrukcí nebo assembleru. To dostalo jméno Fortran a brzy se stalo známým v SSSR pod rusifikovaným jménem. Fortran se stal populárním nástrojem pro vědecké výpočty.

Hlavním revolučním prvkem navrženým specialisty IBM pro komunitu byl ve skutečnosti stejný překladač navržený jako alternativa k assembleru. V prvních letech praxe psaní programů pomocí Fortranu mnoho vývojářů považovalo kompilátor za zcela neúspěšné řešení, zejména z hlediska mzdových nákladů. Mnoho strojových kódů bylo skutečně snazší sestavit než pomocí překladače. S rychlým nárůstem výkonu počítače si však programátoři začali uvědomovat, že by bylo extrémně problematické vytvořit efektivní software, který by plně využíval výpočetní výkon počítače PC bez použití kompilátoru. Počátky vývojářů z IBM se tedy dále rozvíjely. Základní syntaktické konstrukce programovacího jazyka na vysoké úrovni Fortran se v mnoha případech začaly používat jako základní při vytváření nových řešení.

Vytvoření Lispu lze považovat za příklad dosažení praktických výsledků při vývoji konceptů začleněných do Fortranu. Tento jazyk byl vyvinut v roce 1958, širokou popularitu si získal o něco později - v roce 1960. Lisp byl vyvinut Johnem McCarthym a publikován v jednom z populárních časopisů pro IT profesionály. Hlavním účelem dotyčného jazyka je zpracování seznamu. Lisp se stal populární mezi vývojáři umělé inteligence. Na jejím základě byly vytvořeny jazyky jako Planner, Scheme a Common Lisp. Lisp měl také významný dopad na mnoho moderních nástrojů pro vývoj softwaru. Struktura dnes populárních programovacích jazyků na vysoké úrovni je z velké části založena na algoritmech Fortran a Lisp.

Bude však zajímavé zvážit další přístupy ke klasifikaci uvažovaných nástrojů pro vývoj softwaru.

Obecné jazyky vysoké úrovně

Moderní odborníci tak identifikují univerzální jazyky na vysoké úrovni. Patří mezi ně zejména ty, které byly vyvinuty v 60. letech. Jejich klíčové vlastnosti:

Orientace na širokou škálu úkolů (primárně souvisejících s výpočty);

Velké množství jazykových konstrukcí a algoritmů;

Význam nejen pro svou dobu, ale také pro moderní fázi vývoje výpočetní techniky;

Podpora imperativní metodiky v příslušných jazycích.

Univerzální jazyky jsou základem průmyslu vývoje IT. Je možné poznamenat, že zatím nemají žádné přímé analogy, pokud jde o jejich vnitřní strukturu. Ve skutečnosti to do značné míry vysvětluje význam používání odpovídajících jazyků v moderních objektově orientovaných rozhraních. V označených jazycích je také běžný datový typ. Tento faktor do značné míry určuje jejich univerzálnost. Mezi nejpozoruhodnější vlastnosti jazyků patřících do kategorie univerzálních patří kontinuita. Historicky tedy pozdější jazyky zpravidla vycházely z konceptů jejich předchůdců.

Unikátní jazyky

Někteří odborníci na IT označují „jedinečné jazyky“ jako samostatnou kategorii. Patří mezi ně APL, Cobol, Forth, SETL a CLU. Jaká je jejich specifičnost?

Nejdůležitějším aspektem APL je použití polí (vektorů a matic) jako typu klíčové struktury. Specifičností jazyka Cobol je jeho zaměření na komerční sféru. Proto je vhodné jej použít při řešení problémů spojených se standardizovaným formátem pro prezentaci výsledků. Forthův jazyk je charakterizován používáním postfixové notace programů a používáním notace zásobníku. SETL používá sady hodnot jako jeden z klíčových datových typů. CLU je také programovací jazyk na vysoké úrovni. Jeho hlavním rysem je použití konceptu práce s abstraktními datovými typy. Mnoho IT profesionálů vidí logický vznik nových řešení založených na jedinečných jazycích, jako je například objektově orientovaný Cobol.

Nástroje paralelního programování

Tato kategorie může zahrnovat širokou škálu řešení. Paralelní programovací jazyky mohou mít zase velký počet důvodů pro klasifikaci. Například způsob organizace procesů. Tento základ předpokládá klasifikaci nástrojů paralelního programování na základě jejich přítomnosti:

Korutiny;

Vidlice;

Sdružení;

Paralelní závorky;

Algoritmy pro práci s procesy.

Dalším základem pro klasifikaci jazyků tohoto typu jsou metody synchronizace procesů. Vhodná řešení proto mohou zahrnovat:

Semafory;

Monitory;

- „setkání“;

Kritické stránky;

Vzdálené volání procedury;

Transakce klasifikované jako atomové.

Mezi jazyky tohoto typu patří Modula-2, BLISS, Concurrent Pascal, DP, Argus.

Jazyková rodina C.

Výše jsme považovali za příklad programovacího jazyka na vysoké úrovni řešení, jako je C. Ve skutečnosti tvoří celou rodinu. Jazyky, které k němu patří, jsou soukromé konstrukty C. Proto jeho přidání k různým objektově orientovaným komponentám vedlo k vývoji C ++. Po významném filtrování řady konstrukcí C se objevil jazyk Java. Je možné poznamenat, že Java byla vytvořena převážně pod vlivem konceptů projektu Oberon, který vede Niklaus Wirth, tvůrce jazyka Pascal. Je to JavaScript na vysoké úrovni? Samozřejmě ano, navzdory úzkosti jeho aplikace - jako nástroje pro vývoj webových stránek. Programovací jazyky na vysoké úrovni však nezahrnují zejména HTML, XML a SGML. Jsou klasifikovány jako nástroje pro hypertextové značení.

Rodina jazyků Pascal

Programovací jazyky na vysoké úrovni Pascal také tvoří samostatnou rodinu. Na základě Pascala byl skutečně vytvořen Oberon klasifikovaný jako objektově orientovaný typ jazyka. Klíčovou vlastností Oberonu je jeho schopnost poskytovat bezpečnost typu. Kromě Oberona patří mezi jazyky rodiny Pascalů Modula-2 a Component Pascal.

Jazyková rodina Ada

Základní v odpovídající jazykové kategorii - objednáno pro potřeby amerického ministerstva obrany Ada. Byl vytvořen na konci 70. let - počátkem 80. let. Vyznačuje se velkým množstvím funkcí, schopností, všestrannosti. Rodina jazyků Ada zahrnuje řešení jako Cedar, Modula 3.

Rodina jazyků Simula

Jazyk Simula je rozšířený v programovacích odvětvích souvisejících se simulací. Specifičnost odpovídajících řešení je v použití konkrétního jádra. Jeho použití umožňuje použití různých rozšíření přizpůsobených různým aplikacím. Na základě Simuly byl vytvořen objektově orientovaný jazyk Smalltalk, stejně jako BETA, který se vyznačuje schopností kombinovat algoritmy v rámci jedné abstrakce, které odrážejí práci s daty, postupy a kontrolou. Objekty BETA lze prohlížet v různých kontextech, jako jsou proměnné, funkce nebo paralelní systémy.

K řešení problémů s výpočtem se stále více používají grafické procesory, ale stále zůstává otevřená otázka: jak psát efektivní programy pro příslušné konfigurace?

15. 6. 2011 Andrey Adinets

K řešení výpočetních problémů se stále více používají grafické procesory, ale stále zůstává otevřená otázka: jak psát efektivní programy pro příslušnou konfiguraci? Standardní řešení - spousta CUDA nebo OpenCL - umožňuje implementovat algoritmus relativně rychle, ale je obtížné pomocí nich vytvořit verzi optimalizovanou pro konkrétní konfiguraci. Vyžadují se programovací nástroje vyšší úrovně GPU, které lze vytvořit například pomocí rozšiřitelných jazyků.

Ještě před třemi lety byly jednotky grafického zpracování (Graphical Processing Unit, GPU) považovány pouze za grafické karty pro PC, nyní se postoj k nim změnil - objevily se speciální modely GPU serveru, zaměřené na řešení výpočetních úloh, výkon na dvojitou přesnost výpočty se zvýšily, systémy zaznamenaly rekordní výkon a dostaly se na vrchol v žebříčku Top500. Jak psát efektivní programy pro takové stroje? Standardní odpověď je spousta CUDA nebo OpenCL pro programování GPU a MPI na úrovni klastru. Tyto nástroje jsou k dispozici, aktivně podporovány výrobci zařízení, mnoho programů pro ně již bylo napsáno, ale mají i své nevýhody.

CUDA a OpenCL jsou rozšíření jazyka C, není obtížné se je naučit, i když jsou to docela nízké nástroje. S jejich pomocí můžete relativně rychle implementovat algoritmus pro GPU, ale ukázalo se, že je mnohem obtížnější vytvořit verzi optimalizovanou pro konkrétní aplikaci a konfiguraci. Všechny optimalizace bude nutné provést ručně, což zvětší velikost kódu a zhorší jeho čitelnost. Přestože programy vytvořené pomocí OpenCL budou přenositelné v celé řadě architektur, nebude toto portování fungovat dobře. Vyžadují se vyšší programovací nástroje GPU.

Takové nástroje lze vytvořit různými způsoby: představit nový programovací jazyk; přidat směrnice do existujícího jazyka, jak je to provedeno v modelu PGI Accelerator nebo CAPS HMPP; využít rozšiřitelných jazyků. Rozšiřitelné jazyky- programovací jazyky, jejichž syntax a sémantika nejsou pevně dány, ale lze je měnit v závislosti na potřebách programátora. Ve srovnání s tradičními jazyky mají rozšiřitelné jazyky několik výhod: snadněji přidávají nové funkce; jsou otevřené; učení nových programovacích modelů založených na těchto jazycích je jednodušší, protože se musíte naučit pouze relativně malá rozšíření; tyto jazyky usnadňují ladění a optimalizaci programů.

Rozšiřitelné jazyky

Aby byl jazyk rozšiřitelný, je nutné, aby obsahoval:

  • mechanismus pro rozšiřování beze změny kompilátoru, stejně podporovaný všemi kompilátory, což znamená zejména přítomnost standardního rozhraní pro interakci s kompilátory;
  • konstrukce pro rozšíření a manipulaci s kódovým stromem, jako jsou makra nebo kvazi-citace, k rozšíření jazyka;
  • výkonné nástroje pro psaní rozšíření, jako je samotný rozšiřitelný jazyk, a jiný jazyk, jehož síla naznačuje, že kód rozšíření může dělat totéž jako jakýkoli program v daném jazyce.

Ukazuje se, že existuje relativně málo jazyků, které splňují tyto požadavky: Lisp, Nemerle, Seed7, xoc a Stratego. Současně xoc, který je navržen k rozšíření jazyka C, používá k zápisu rozšíření samostatný jazyk Zeta a Stratego je jazyk domény pro vytváření převaděčů zdrojového kódu. Nemerle je rozšiřitelný jazyk využívající framework. Síť.

Všechny rozšiřitelné jazyky podporují mechanismy pro práci s programovým stromem a v první řadě jde o kvazi-citující konstrukci - specifikaci objektu představujícího programový strom pomocí samotného zdrojového kódu.

V jazyce Nemerle se k tomu používá konstrukce, například vytváří strom skládající se z deklarace proměnné i s počáteční hodnotou 0. Kvazi-citace je podobná vytváření řetězcových objektů s řetězcovými konstantami. Na obr. 1 je příkladem kvazi-nabídky. Interpolační konstrukt umožňuje substituci proměnných hodnot do pevné šablony v kvazi-nabídce. V Nemerle se k tomu používají konstrukty $ (...), pokud například potřebujete nahradit seznam. Také v rozšiřitelných jazycích existují konstrukce pro analýzu stromu programu. V jazyce Nemerle se k tomu používá operátorová shoda (...) (...), což je analogie přechodu z jazyka C, který jako větve používá konstrukty kvazi-citace. V tomto případě je interpolace považována za deklaraci nových proměnných, které v případě úspěšné shody obdrží hodnoty odpovídajících podstromů. Například pro operátor shody shoda (e) (| \u003d\u003e ...), pokud e obsahuje strom, bude spadat do proměnné a a do proměnné b.

Nástroje pro práci se stromem programu se používají v konstrukcích rozšíření jazyka. V jazyce Nemerle se jedná o makra - speciální funkce, které se provádějí ve fázi kompilace a vracejí fragment programového stromu, který je místo jejich volání nahrazen. V tomto případě makro přijímá fragmenty programu jako parametry a může je transformovat. V zásadě můžete volat makro stejným způsobem jako běžnou funkci; ale zajímavější vlastností je vazba volání makra na speciální syntaxi. To umožňuje zavedení nových syntaktických konstrukcí do jazyka Nemerle, a tím rozšíření jazyka.

Na obr. 2 ukazuje příklad makra se syntaktickým rozšířením, které umožňuje deklarovat vícerozměrnou smyčku s proměnnými a počtem iterací v každé dimenzi, a na obr. Obrázek 3 ukazuje příklad transformace programu, kterou toto makro implementuje. Všimněte si, že makro, které dělá toto rozšíření, je méně než 30 řádků zdrojového kódu a obsahuje několik kontrol chyb. Podle tradičního přístupu by implementace takového rozšíření vyžadovala podstatně více kódu a navíc by vyžadovala studium vnitřní struktury kompilátoru.

Historicky se první mechanismus maker objevil v Lispu, ve kterém je program reprezentován jako běžný seznam a pro práci se stromem programu nevyžaduje speciální konstrukce, proto je v tomto jazyce nejrozšířenější rozšiřitelné programování. Makra v Nemerle jsou podobná makrům v Lispu. V systému xoc je mechanismus rozšíření implementován prostřednictvím rozšíření gramatiky a analyzovat atributy stromu. Libovolná přípona nutně určuje dva atributy: typ syntaktické konstrukce a výraz v základním jazyce, na který je převeden.

Rozšiřitelné jazyky se vyznačují implementací mnoha standardních konstrukcí prostřednictvím maker. V jazyce Nemerle jsou všechny smyčky a podmíněné operátory, kromě shody, implementovány prostřednictvím maker a v Lispu jsou makra standardní konstrukce smyček a deklarace funkcí.

Jak používat jazyky?

Pro rozšiřitelný programovací jazyk můžete psát konstrukce, které vám umožní programovat grafické procesory nejpohodlnějším způsobem, což bylo provedeno v rámci projektu NUDA (Nemerle Unified Device Architecture), jehož cílem je vytvořit rozšíření Nemerle jazyk pro programování GPU. OpenCL se používá jako rozhraní pro interakci s GPU a cílovým jazykem k reprezentaci programu.

Nejprve musíte implementovat provádění GPU podmnožiny kódu v jazyce Nemerle. Současně by měly být podporovány známé jazykové operátory, jako jsou smyčky a větve, stejně jako práce s jednoduchými datovými typy, strukturami a poli. Kód pro GPU je převzat v samostatných funkcích nebo v jádrech NUDA. Každé jádro je označeno makrem nukernel, které generuje kód OpenCL a metodu útržku pro volání jádra na straně hostitele z kódu jádra. Před vygenerováním kódu se rozšíří všechna makra, s výjimkou smyčkových a větvových maker. Pokud je třeba volat funkci uvnitř jádra, musí být tato funkce označena makrem nucode, které pro tuto funkci vygeneruje kód OpenCL. Jádro se nazývá pomocí makra nucall; kromě parametrů jádra se do něj předává také konfigurace vláknové mřížky, ze které se spouští.

Nejčastěji se tělo smyčky používá jako jádro pro GPU, takže bych chtěl okamžitě přenést smyčku na GPU. V Nemerle to lze provést - odpovídající makro v NUDA se nazývá nuwork. Vezme velikost bloku podprocesu jako požadované parametry a na základě aktuálního kontextu a analýzy kódu těla smyčky určí sadu proměnných, které musí být předány jádru jako parametry. Tělo jádra je tvořeno z těla smyčky, výpočtu indexů smyčky prostřednictvím globálního čísla vlákna a podmínky, která umožňuje smyčce provést správně, i když velikost globální mřížky není dělitelná velikostí skupiny vláken. Místo smyčky je nahrazeno volání makra nucall, které volá vygenerované jádro.

V zásadě je možné povolit použití běžných polí jazyka Nemerle v programech GPU, ale to vede k vysokým režijním nákladům - pole musí být zkopírováno do paměti GPU při každém volání jádra a poté zkopírováno zpět. Programy GPU proto používají speciální typy polí s línou synchronizací mezi GPU a CPU. To na jedné straně umožňuje neuspořádat text programu příkazy pro kopírování dat a na druhé straně vyhnout se režii kopírování dat. Tato pole, stejně jako běžná pole v Nemerle, používají správu paměti prostřednictvím uvolňování paměti. K přidělení paměti pro taková pole existuje makro nunew, které je třeba použít na obvyklý operátor přidělení paměti.

Na obr. 4 vlevo je běžný program pro přidávání polí a vpravo je podobný program, ale provádí výpočty na GPU. Získání programu GPU z běžného je docela jednoduché - stačí použít makra na operace smyček a přidělení paměti, zatímco množství kódu zůstává prakticky nezměněno. Program napsaný pomocí NUDA trvá méně než 20 řádků kódu. Podobný program, ale v čistém C a OpenCL, zabírá přes 100 řádků.

Kromě maker, která usnadňují práci s GPU, obsahuje systém rozšíření NUDA také poznámky pro převod smyček. Anotace jsou v zásadě speciální makra. Například vložená anotace se použije na smyčku s pevným počtem iterací a rozbalí ji úplně. Anotace dmine provede rozvinutí hluboké smyčky. „Hluboké rozvinutí“ znamená, že vytváření více kopií těla smyčky a míchání se provádí nejen pro převedenou smyčku, ale také pro vnořené smyčky, pokud jsou nezávislé.

efekt

Proč se programátor musí naučit nový jazyk a ovládat nové knihovny rozšiřitelných jazyků? Hlavní odpovědí je produktivita. Díky algoritmu paralelních smyček pracujících s poli a napsaných v jazyce Nemerle stačí přidat několik anotací, abyste získali program pro GPU. V tomto případě bude program spuštěn na jakémkoli zařízení s podporou OpenCL, včetně GPU nVidia a AMD, stejně jako na procesorech x86. Chcete-li dosáhnout toho samého pomocí pouze technologií OpenCL nebo CUDA, budete muset utratit podstatně více zdrojů, což půjde nejen o psaní zdrojového kódu, ale také o ladění interakce mezi hostitelem a GPU.

Dalším důvodem je výkon generovaného kódu. Na CUDA nebo OpenCL bude nutné provést smyčkové převody ručně a zvlášť pro každou architekturu. Je to dlouhý a náchylný k chybám a výsledný kód je obtížně čitelný a obtížně udržovatelný. S NUDA lze tuto práci provádět pomocí anotací. Například pro více jader můžete optimalizovat konvoluci obrazu nebo násobení matic pomocí inline a dmine anotací. Bez zvětšení velikosti zdrojového kódu můžete dosáhnout zlepšení výkonu dvakrát až pětkrát. Současně, pokud by byly stejné transformace prováděny ručně, vedlo by to ke zvýšení kódu občas, někdy o řád, nemluvě o čase stráveném laděním a výběrem optimálních parametrů skenování. Například sedmřádkový univerzální anotovaný program v NUDA pro vynásobení transponované matice maticí s dvojitou přesností se na nVidia Tesla C2050 provádí pouze o 40% pomaleji než nejrychlejší implementace (CUBLAS 3.2). Podobný ručně psaný program by trval 70 řádků kódu. Přirozeně můžete u standardních úkolů ručně napsat kód jednou, abyste zvýšili produktivitu, ale u konkrétních úkolů bude snížení nákladů na pracovní sílu a zvýšení produktivity velmi užitečné. A konečně, zvýšení produktivity platí také pro samotné vytváření rozšíření: jejich vytváření pomocí rozšiřitelných jazyků je jednodušší než používání tradičních nástrojů. Celý systém NUDA, navzdory své funkčnosti, trvá pouze 12 tisíc řádků kódu, s výjimkou testů. To je relativně malé, například kompilátor Nemerle (build 9025) trvá přibližně 130 tisíc řádků.

Rozšiřitelný jazyk je mocný nástroj a jeho použití v paralelních výpočtech je stále v plenkách. Ve vývoji paralelních programovacích jazyků existuje mnoho zajímavých problémů a každý z nich lze vyřešit pomocí kombinace rozšíření a knihoven. Do jazyka můžete přidat asynchronní bloky kódu a paralelní smyčky, můžete vytvářet pohodlné konstrukce pro programování klastrových systémů, jako jsou distribuovaná pole. Nakonec můžete pomocí rozšíření vytvořit kompletní paralelní programovací jazyk, jako je Chapel nebo X10.

Andrey Adinets([chráněno e-mailem]) - junior výzkumný pracovník Centrum pro výzkum výpočetní techniky na Moskevské státní univerzitě (Moskva).



1.1 Microsoft Visual Studio C ++

Microsoft Visual Studio je řada produktů Microsoft, která zahrnuje integrované vývojové prostředí softwaru a řadu dalších nástrojů.

Visual Studio obsahuje jednu nebo více z následujících možností: Visual Studio includes one or more of the following:

Visual Basic .NET a dříve - Visual Basic;

Visual C ++;

Visual C #.

Mnoho možností doručení zahrnuje také:

Microsoft SQL Server nebo MSDE;

Visual Source Safe - systém řízení verzí souborového serveru;

V minulosti Visual Studio také zahrnovalo následující produkty:

Visual InterDev;

Visual J ++;

Visual J #;

Visual FoxPro.

Nejvýznamnější verze balíčku:

Visual Studio 97 je první vydání sady Visual Studio a poprvé spojuje různé nástroje pro vývoj softwaru. Byla vydána ve dvou edicích Professional a Enterprise. To zahrnovalo Visual Basic 5.0, Visual C ++ 5.0, Visual J ++ 1.1, Visual FoxPro 5.0 a vývojové prostředí ASP, Visual InterDev, se poprvé objevilo. Visual Studio 97 byl prvním pokusem společnosti Microsoft o vytvoření jednotného vývojového prostředí v různých programovacích jazycích: Visual C ++, Visual J ++, Visual InterDev a MSDN používaly jediné prostředí s názvem Developer Studio. Visual Basic a Visual FoxPro používaly samostatná vývojová prostředí.

Visual Studio 6.0 - Vydáno v červnu 1998 - Poslední verze sady Visual Studio spuštěná na platformě Win9x. Stále oblíbený u programátorů jazyka. Tato verze byla před vývojem platformy .NET hlavním vývojovým prostředím pro aplikace Windows od společnosti Microsoft.

Visual Studio .NET (s kódovým označením Rainier; interní verze 7.0) - Vydáno v únoru 2002 (zahrnuje .NET Framework 1.0). Aktualizace Service Pack 1 pro Visual Studio .NET (2002) byla vydána v březnu 2005.

Visual Studio .NET 2003 (s kódovým označením Everett; interní verze 7.1) - Vydáno v dubnu 2003 (zahrnuje .NET Framework 1.1). Aktualizace Service Pack 1 pro Visual Studio .NET 2003 byla vydána 13. září 2006.

Visual Studio 2005 (kódové označení Whidbey; interní verze 8.0) - Vydáno koncem října 2005 (zahrnuje .NET Framework 2.0). Na začátku listopadu 2005 byla také vydána řada produktů v edici Express: Visual C ++ 2005 Express, Visual Basic 2005 Express, Visual C # 2005 Express atd. 19. dubna 2006 byla verze Express zdarma. Aktualizace Service Pack 1 pro VS2005 a všechna vydání Express byla vydána 14. prosince 2006. Další oprava pro aktualizaci SP1 k vyřešení problému s kompatibilitou se systémem Windows Vista byla vydána 3. června 2007.

Visual Studio 2008 (s kódovým označením Orcas) - vydáno 19. listopadu 2007, současně s .NET Framework 3.5. Zaměřuje se na vytváření aplikací pro Windows Vista (ale podporuje XP), Office 2007 a webové aplikace. Zahrnuje LINQ, nové verze C # a Visual Basic. Visual J # nebyl ve studiu zahrnut. Od 28. října 2008 je ruská verze k dispozici poprvé.

Nástupní produkt sady Visual Studio 2008 má kódové označení Havaj. 29. září 2008 došlo k oznámení představujícímu některé z inovací, které se objeví ve Visual Studiu 2010 a .NET Framework 4.0.

Vývojář aplikací, který se rozhodne využít služeb Visual Studio.Net 7.0, má k dispozici mnoho nových technologií a nástrojů, které mu umožňují rychle a efektivně vytvářet běžné aplikace Windows, které se nyní běžně nazývají desktopové aplikace, stejně jako webové aplikace a webové služby. Microsoft přidal do programátorského arzenálu nový jazyk C # (vyslovuje se „C Sharp“), který, jak slibují odborníci, může několikrát urychlit vývojový cyklus složitých projektů.

Hlavní novinkou, která by vás měla upoutat, je to, že Visual C ++, Visual Basic a C # používají stejné integrované vývojové prostředí (IDE), což umožňuje vytvářet složité projekty pomocí různých jazyků (smíšená jazyková řešení) . Vícejazyčné vývojové prostředí .Net (.Net Framework) je součtem tří složek:

společná jazyková běhová knihovna pro uvažovanou sadu jazyků;

unified Programming Classes

model vývoje webových aplikací (Active Server Pages.Net).

První komponenta, knihovna Common Language Runtime (CLR), funguje jak za běhu, tak během vývoje. Během provádění kódu monitoruje dynamiku vícevláknových aplikací, zajišťuje propojení procesů, udržuje jejich zabezpečení a automatizuje postupy pro přidělování a uvolňování paměti. Ve fázi vývoje CLR automatizuje běžné úkoly řešené programátorem, což výrazně zjednodušuje používání nových technologií. Výhody vytváření komponent modelu COM (Component Object Model, zkráceně COM) jsou zvláště známé.

Druhá komponenta (Unified Programming Classes) poskytuje vývojáři jednotnou objektově orientovanou rozšiřitelnou knihovnu tříd, která je spolu s dalšími prostředky součástí aplikačního programovacího rozhraní (API). Kombinuje prvky MFC (Microsoft Foundation Classes), WFC (Windows Foundation Classes) a část API používaného Visual Basic.

Třetí komponenta (ASP.Net) je doplněk k třídám, který umožňuje používat objektově orientovanou technologii při vývoji typických prvků rozhraní HTML. Ve skutečnosti jsou tyto prvky prováděny na straně serveru a promítají funkčnost uživatelského rozhraní jako HTML kód. Při vývoji serveru je však možné použít výkonné zařízení poskytované modelem programovacího objektu. Výsledkem je dramatické zjednodušení procesu vytváření webových aplikací. Kromě toho podporuje ASP.Net poměrně nový koncept nebo model vývoje softwaru. Pravděpodobně jste o tom slyšeli jako o technologii tenkého klienta. Hlavní podstatou tohoto modelu je poskytování kódu uživateli nikoli ve formě nainstalovaného produktu, ale ve formě dočasné služby.

Kód, který je postaven na vývojovém prostředí .NET Framework, se nazývá spravovaný kód (spravovaný kód)na rozdíl od běžného, \u200b\u200bnespravovaného kódu (nespravovaný kód).V režimu .net vytvářejí kompilátoři recenzovaných jazyků metadata (metadata),které doprovázejí samotný kód. To znamená, že generují další informace popisující datové typy, objekty a odkazy. Knihovna Common Language Runtime používá metadata k hledání a načítání objektů, spouštění funkcí, předávání parametrů a umisťování objektů do paměti.

Důležitou funkcí běhové knihovny je automatické uvolnění paměti obsazené objekty, které se již nepoužívají. Tato inovace má zlepšit spolehlivost jednotlivých komponent a celé vyvíjené aplikace. Takto spravovaná data se nazývají spravovaná data. (spravovaná data).Pokud je váš kód zvládnutelný (spravovaný kód),pak můžete použít spravovaná data, ale nemusíte je používat. Navíc možná nebudete vědět, zda jsou vaše data spravována.

Knihovna Common Runtime Library (CLR) usnadňuje vytváření aplikací a jejich komponent vyvinutých v různých jazycích a nastavených (cílových) pro použití CLR. Tyto moduly lze integrovat do jednoho projektu a komunikovat mezi sebou, jako by byly vytvořeny ve stejném jazyce. Můžete například deklarovat třídu a poté z ní vytvořit třídu odvozenou v jiném jazyce. Můžete a jednoduše použijte metody třídy v rámci modulu napsaného v jiném jazyce. Tato integrace je možná, protože kompilátory a nástroje v různých jazycích sdílejí společný systém typů definovaný v CLR, stejně jako nová pravidla hry, která byla přijata během jejího vývoje.

1.2 C ++ Builder

Borland C ++ Builder je nedávný nástroj pro rychlý vývoj aplikací společnosti Borland, který vám umožňuje vytvářet aplikace v C ++ pomocí Delphi IDE a knihovny komponent. Tento článek pojednává o vývojovém prostředí C ++ Builder a základních technikách používaných při návrhu uživatelského rozhraní.

C ++ Builder je aplikace SDI, jejíž hlavní okno obsahuje přizpůsobitelný panel nástrojů (vlevo) a paletu komponent (vpravo). Ve výchozím nastavení se navíc při spuštění nástroje C ++ Builder zobrazí okno inspektoru objektů (vlevo) a nový formulář aplikace (vpravo). Pod oknem formuláře žádosti je okno editoru kódu.


Obr. 1. Vývojové prostředí pro C ++ Builder

Formuláře jsou páteří aplikací C ++ Builder. Vytvoření uživatelského rozhraní pro aplikaci spočívá v přidání prvků objektů Builderu C ++ nazývaných komponenty do okna formuláře. Komponenty C ++ Builderu jsou umístěny na paletě komponent, vyrobené ve formě vícestránkového poznámkového bloku. Důležitým prvkem C ++ Builderu je, že vám umožňuje vytvářet vlastní komponenty a přizpůsobovat paletu komponent a také vytvářet různé verze palety komponent pro různé projekty.

Komponenty jsou rozděleny na viditelné (vizuální) a neviditelné (nevizuální). Vizuální komponenty se zobrazují v době běhu stejným způsobem jako v době návrhu. Příkladem jsou tlačítka a upravitelná pole. Nevizuální komponenty se v době návrhu zobrazují jako ikony ve formuláři. Nikdy nejsou viditelné za běhu, ale mají určité funkce (například poskytují přístup k datům, volají standardní dialogy Windows 95 atd.)


Postava: 2. Příklad použití viditelných a neviditelných komponent

Chcete-li přidat komponentu do formuláře, můžete vybrat požadovanou komponentu na paletě pomocí myši a kliknout levým tlačítkem na požadované místo navrženého formuláře. Komponenta se objeví ve formuláři a poté ji lze přesouvat, měnit její velikost a další vlastnosti.

Každá komponenta C ++ Builder má tři druhy charakteristik: vlastnosti, události a metody.

Pokud vyberete komponentu z palety a přidáte ji do formuláře, inspektor objektů automaticky zobrazí vlastnosti a události, které lze s touto komponentou použít. V horní části inspektoru objektů je rozevírací seznam, který umožňuje vybrat požadovaný objekt z těch, které jsou k dispozici ve formuláři.

Vlastnosti jsou atributy komponenty, které určují její vzhled a chování. Mnoho vlastností komponenty ve sloupci vlastností má výchozí hodnotu (například výška tlačítek). Vlastnosti součásti se zobrazují na stránce Vlastnosti. Inspektor objektů zobrazuje publikované vlastnosti komponent. Kromě publikovaných vlastností mohou komponenty a nejčastěji mají veřejné publikované vlastnosti, které jsou k dispozici pouze za běhu. Inspektor objektů se používá k nastavení vlastností v době návrhu. Seznam vlastností se nachází na stránce vlastností inspektoru objektů. Můžete definovat vlastnosti v době návrhu nebo psát kód a upravit vlastnosti komponenty za běhu.

Při definování vlastností komponenty v době návrhu musíte vybrat komponentu ve formuláři, otevřít stránku vlastností v inspektoru objektů, vybrat definovanou vlastnost a změnit ji pomocí editoru vlastností (může to být jakékoli jiné pole pro zadávání textu nebo čísel, rozevírací seznam, rozevírací seznam, dialogový panel atd.).

1.3 Delphi

Delphi je vývojové prostředí, které používá programovací jazyk Delphi (od verze 7 se jazyk v prostředí nazývá Delphi, dříve - Object Pascal), vyvinutý společností Borland a původně implementovaný ve svém balíčku Borland Delphi, od kterého získal aktuální jméno v roce 2003. Object Pascal je v podstatě dědicem jazyka Pascal s objektově orientovanými rozšířeními.

Delphi je rychlé vývojové prostředí, které používá Delphi jako svůj programovací jazyk. Delphi je silně typovaný objektově orientovaný jazyk založený na Object Pascal, který programátoři znají.

Delphi je kombinací několika kritických technologií:

    vysoce výkonný překladač do strojového kódu;

    - objektově orientovaný model komponent;

    - vizuální (a tedy vysokorychlostní) vytváření aplikací z prototypů softwaru;

    - škálovatelné nástroje pro vytváření databází.

    Borland Delphi 8 Studio vám umožňuje vytvářet různé programy: od nejjednodušších aplikací v jednom okně až po programy pro správu distribuované databáze. Balíček obsahuje řadu nástrojů, které zajišťují práci s databázemi, dokumenty XML, vytváření systému nápovědy a dalšími úkoly. Charakteristickým rysem sedmé verze je podpora technologie .NET.

    Hlavní důraz modelu v Delphi spočívá v maximálním využití kódu, což umožňuje velmi rychlý vývoj aplikací, protože již existují připravené objekty. A také můžete vytvářet vlastní objekty bez jakýchkoli omezení. Jazyk Delphi je silně typovaný objektově orientovaný jazyk založený na Object Pascal, který programátoři znají.

    Delphi je standardně vybaveno 270 základními třídami. Je velmi výhodné psát v tomto jazyce, a to jak do databází, tak i do herních programů. Pokud vezmeme v úvahu pohodlné rozhraní pro vytváření grafických skořápek, můžeme s jistotou říci, že jazyk Delphi je velmi snadno srozumitelný, ale zároveň velmi výkonný programovací jazyk.

    První verzí plnohodnotného vývojového prostředí Delphi pro .NET byla Delphi 8. Umožňovala vám psát aplikace pouze pro .NET. V současné době můžete v Delphi 2006 psát aplikace pro .NET pomocí .NET Standard Class Library, VCL pro .NET. Rámec také umožňuje vytvářet aplikace .NET v aplikacích C # a Win32 v C ++. Delphi 2006 obsahuje funkce pro psaní běžných aplikací pomocí knihoven VCL a CLX. Delphi 2006 podporuje technologii MDA s ECO (Enterprise Core Objects) verze 3.0.

    V březnu 2006 se společnost Borland rozhodla ukončit další zdokonalování IDE JBuilder, Delphi a C ++ Builder kvůli nerentabilitě tohoto směru. V srpnu 2006 společnost Borland vydala odlehčenou verzi aplikace RAD Studio nazvanou Turbo: Turbo Delphi, Turbo Delphi pro .NET, Turbo C #, Turbo C ++. V březnu 2008 byla produktová řada ukončena.

    V březnu 2007 potěšil CodeGear své uživatele aktualizovanou řadou Delphi 2007 pro produkty Win32 a vydáním zcela nového produktu Delphi 2007 pro PHP. V červnu 2007 představila společnost CodeGear své plány do budoucna, to znamená, že zveřejnila tzv. Cestovní mapu, kterou najdete zde

    25. srpna 2008 společnost Embarcadero, nový majitel CodeGear, zveřejnila tiskovou zprávu pro Delphi pro Win32 2009. Verze přinesla do jazyka řadu inovací, například:

    - plná podpora pro Unicode ve výchozím nastavení ve všech částech jazyka, VCL a RTL;

    - generické typy, jsou to také generické typy.

    - anonymní metody.

    Mezi mnoha běžnými softwarovými produkty vyrobenými v Delphi najdete:

    1. Produkty Borland: Borland Delphi, Borland C ++ Builder, Borland JBuilder 1 a 2 verze.

    2. Správa / vývoj databází: MySQL Tools (správce, prohlížeč dotazů), IBExpert, TOAD

    3. Inženýrský software: Altium Designer / Protel (návrh elektroniky).

    4. Prohlížeče grafiky: Prohlížeč obrázků FastStone, FuturixImager, Photofiltre.

    5. Přehrávače videa a zvuku: KMPlayer (video a audio přehrávač), X-Player (audio přehrávač).

    6. Doručování informací na internetu: Skype (VoIP a IM), QIP, QIP Infium a R&Q, (IMy), The Bat! a si.Mail (e-mailoví klienti), PopTray (kontrola pošty), FeedDemon (zobrazení diskusních skupin RSS / Atom), XanaNews (čtení diskusních skupin), Xnews (čtení diskusních skupin).

    7. Tvorba hudby: FL Studio (dříve FruityLoops).

    8. Vývoj softwaru: Dev-C ++, Dev-PHP, Maguma Open Studio a Open Perl IDE (IDE), DUnit (testování jednotky), Jedi Code Format (formátování kódu), Game Maker (tvorba hry) Nápověda a příručka ( help authoring system), Inno Setup (instalační modul).

    9. Vývoj webu: Macromedia HomeSite (HTML Editor), TopStyle Pro (CSS Editor), Macromedia Captivate (Screen Capture), Quick Page 2008 (Web Site Development Environment).

    10. Webové prohlížeče (skiny pro MSIE): Avant Browser, Netcaptor.

    11. Pomůcky: Spybot - Hledat a zničit, Ad-Aware (anti-spyware), jv16 PowerTools, FDK (multifunkční nástroj pro optimalizaci systému), Total Commander a Frigate (správci souborů), DarkCrypt TC / GUI (šifrovací software), ImageSpyer a StegoTC (softwarový steganografický komplex), Copernic Desktop Search, PowerArchiver a PeaZip (archivy), MCubix (dolování dat), Download Master [správce stahování], ACProtect (software pro balení a ochranu souborů EXE).

    12. Textové editory: SynEdit, Bred2, KeyNote, cEdit Professional, Programmer's Notepad, UniRed, gleditor.

    13. Editory binárních souborů (editory HEX): Hexapad

    14. Účetnictví a daně: Profesionální daňový software společnosti Intuit Lacerte, včetně všech subsystémů, jako je QuickBooks / EasyACCT Trial Balance Utility, systém správy dokumentů a nástroj pro opravu databáze klienta.

    15. Programy pro čtení a katalogizaci elektronického textu: DarkLib (katalogizátor a víceformátová čtečka knih), IxReader (čtečka knih).

    2 Srovnávací analýza výhod (výhod) nevýhod moderních objektově orientovaných jazyků a vývojových nástrojů na nich založených

    2.1 Objektový Pascal

    Object Pascal je plně objektově orientovaný dialekt Pascalu, vyvinutý společností Apple Computer ve spolupráci s Nicklausem Wirthem. V roce 1986 přidal Borland podobné rozšíření Pascal k Turbo Pascal pro Macintosh; s vydáním Turbo Pascal 5.5 bylo rozšíření dostupné pro DOS. Počínaje Delphi 7 začal Borland oficiálně nazývat svůj jazyk Delphi. Object Pascal je však podporován a vyvíjen jinými vývojáři. Nejzávažnější implementace Object Pascal (kromě Delphi) jsou TMT Pascal, Virtual Pascal a Free Pascal.

    Libovolný program v Delphi se skládá ze souboru projektu (soubor s příponou dpr) a jednoho nebo více modulů (soubory s příponami pas). Každý z těchto souborů popisuje programovou jednotku Object Pascal.

    V okně kódu jsou takzvaná vyhrazená slova zvýrazněna tučně a komentáře kurzívou (jsou také zvýrazněna vyhrazená slova a komentáře v knize). Jak vidíte, text programu začíná vyhrazeným slovním programem a končí slovním koncem následovaným tečkou. Všimněte si, že kombinace konce následovaná tečkou se nazývá terminátor programové jednotky: jakmile se takový terminátor v textu programu objeví, kompilátor přestane analyzovat program a zbytek textu ignoruje.

    Vyhrazená slova hrají v Object Pascal důležitou roli a dávají programu jako celku vlastnost textu psaného téměř přirozenou angličtinou. Každé vyhrazené slovo (a v Object Pascal je jich několik desítek) nese pro kompilátor podmíněnou zprávu, která analyzuje text programu stejným způsobem, jako jej čteme: zleva doprava a shora dolů.

    Komentáře naopak pro kompilátor nic neznamenají a ignoruje je. Komentáře jsou důležité pro programátora, který s jejich pomocí vysvětlí určité části programu. Přítomnost komentářů v textu programu je jasnější a usnadňuje zapamatování si rysů implementace programu, která byla napsána před několika lety. V Object Pascal je komentář libovolná posloupnost znaků uzavřených do složených závorek. Ve výše uvedeném textu jsou dva takové komentáře, ale řádek

    ($ R * .RES)

    není ve skutečnosti komentář. Tato speciálně napsaná část kódu se nazývá direktiva kompilátoru (v našem případě instrukce kompilátoru k připojení takzvaného souboru prostředků k programu). Směrnice začínají znakem $, který bezprostředně následuje za úvodní složenou závorkou.

    Jelikož mluvíme o komentářích, všiml jsem si, že Object Pascal může také používat páry znaků (*, *) a // jako oddělovače komentářů. Závorky (* ... *) se používají jako složené závorky, to znamená, že textový fragment v nich je považován za komentář a symboly // značí kompilátoru, že komentář je umístěn za nimi a pokračuje na konec aktuální řádek:

    (Toto je komentář)

    (* Toto je také komentář *)

    // Všechny znaky až do konce tohoto řádku tvoří komentář

    Slovo Program, za nímž následuje název programu a středník, tvoří název programu. Za názvem následuje sekce popisu, ve které programátor (nebo Delphi) popisuje identifikátory použité v programu. Identifikátory označují prvky programu, jako jsou typy, proměnné, procedury, funkce (o prvcích programu si povíme o něco později). Tady s pomocí klauzule, která začíná použitím vyhrazeného slova, programátor informuje kompilátor o těch fragmentech programu (jednotkách), které musí být považovány za nedílnou součást programu a které jsou umístěny v jiných souborech. Struny

    používá

    Formuláře, Unit1 v „Unitl.pas“ (fmExample);

    uveďte, že kromě souboru projektu by měl program používat moduly Forms a Unit1. modul Formuláře je standardní (tj. již známý Delphi) a modul Unit1 je nový, dříve neznámý, a v tomto případě Delphi také specifikuje název souboru s textem modulu (v 'uniti.pas') a název popisného souboru přidruženého k formulářům modulu (fmExample).

    Samotné tělo programu začíná slovem begin a je ukončeno koncovým zakončením tečkou. Tělo se skládá z několika příkazů Object Pascal. V každém operátoru je implementována nějaká akce - změna hodnoty proměnné, analýza výsledku výpočtu, volání podprogramu atd. V těle našeho programu jsou tři spustitelné operátory:

    Application.Initialize;

    Application.CreateForm (TfmExample, fmExample);

    Application.Run;

    Každý z nich implementuje volání jedné z metod objektu Application

    Objekt je speciálně navržený fragment programu, který obsahuje data a podprogramy pro jejich zpracování. Data se nazývají pole objektu a podprogramy se nazývají metody. Objekt jako celek je určen k řešení konkrétního problému a je v programu vnímán jako nedělitelný celek (jinými slovy nelze z objektu „vytáhnout“ samostatné pole nebo metodu). Objekty hrají v moderních programovacích jazycích nesmírně důležitou roli. Jsou vynalezeny za účelem zvýšení produktivity programátora a zároveň zlepšení kvality programů, které vyvíjí. Dvě hlavní vlastnosti objektu - funkčnost a nedělitelnost - z něj činí nezávislou nebo dokonce soběstačnou součást programu a usnadňují přenos objektu z jednoho programu do druhého. Vývojáři Delphi pro vás a pro mě přišli se stovkami objektů, které lze považovat za stavební bloky, ze kterých programátor staví vícepodlažní programovou budovu. Tento princip vytváření programů se nazývá objektově orientované programování (OOP). Objekt Application obsahuje data a podprogramy nezbytné pro normální fungování programu Windows jako celku. Delphi automaticky vytvoří objekt aplikace pro každý nový projekt. Čára

    Application.Initialize;

    znamená volání metody Initialize objektu Application. Po přečtení tohoto řádku kompilátor vygeneruje kód, který donutí procesor pokračovat v provádění části programu, kterou pro nás napsali vývojáři Delphi. Po provedení tohoto fragmentu (programátoři říkají: po ukončení podprogramu) přejde řízení procesoru na další řádek programu, ve kterém je volána metoda CreateForm atd.

    Moduly jsou softwarové jednotky určené k umisťování fragmentů programů. Pomocí programového kódu, který je v nich obsažen, je implementována celá behaviorální stránka programu. Libovolný modul má následující strukturu: část záhlaví deklarací rozhraní část terminátoru implementace Záhlaví se otevře s vyhrazeným slovem Unit následovaným názvem jednotky a středníkem. Sekce deklarace rozhraní se otevře s vyhrazeným slovem Rozhraní a část implementace se otevře se slovem implementace. Ukončovací modul, stejně jako programový terminátor, končí tečkou. Následující fragment kódu je syntakticky správná verze modulu:

    jednotka Unit1;

    rozhraní

    // Sekce deklarací rozhraní

    implementace

    // Sekce implementace

    konec.

    Sekce deklarace rozhraní popisuje prvky programu (typy, třídy, postupy a funkce), které budou „viditelné“ pro ostatní moduly programu, a část implementace popisuje, jak tyto prvky fungují. Rozdělení modulu na dvě části poskytuje pohodlný mechanismus pro výměnu algoritmů mezi samostatnými částmi jednoho programu. Implementuje také prostředek výměny vývoje softwaru mezi jednotlivými programátory. Po obdržení zkompilovaného "cizího" modulu získá programátor přístup pouze ke své části rozhraní, která, jak již bylo uvedeno, obsahuje deklarace prvků. Podrobnosti implementace deklarovaných postupů, funkcí, tříd jsou skryty v sekci implementace a nejsou k dispozici jiným modulům.

    Třídy slouží jako hlavní nástroj pro implementaci výkonných funkcí Delphi. Třída je vzor, \u200b\u200bpodle kterého jsou objekty vytvářeny, a naopak, objekt je instancí implementace třídy. Vzory pro vytváření programových prvků v Object Pascal se nazývají typy, takže třída TfmExamplel je typ. Jeho deklaraci předchází slovo vyhrazené pro typ, které upozorní kompilátor na začátek sekce deklarace typu.

    Standardní třída TForm implementuje vše potřebné k vytvoření a fungování prázdného okna Windows. Třída TfmExamplel je odvozena z této třídy, o čemž svědčí řádek

    TfmExample \u003d třída (TForm)

    ve kterém je název nadřazené třídy uveden v závorkách za třídou vyhrazených slov. Termín „generováno“ znamená, že třída TfmExample zdědila všechny schopnosti nadřazené třídy TForm a přidala vlastní ve formě dalších komponent, které jsou vloženy do formuláře fmExample. Seznam komponent, které jsme vložili, je významnou součástí popisu třídy.

    Vlastnost, která potomky tříd dědí všechny vlastnosti nadřazené třídy a obohacují je o nové funkce, je jedním ze základních principů objektově orientovaného programování. Z dědice lze vygenerovat nového dědice, který přispěje ve formě dalších stubů programu atd. Výsledkem je vytvoření hierarchie větvících se tříd, na jejímž vrcholu je nejjednodušší třída TObject (všechny ostatní třídy v Delphi jsou odvozeny od tohoto jediného předka) a na samém konci hierarchie existují výkonné potomkové třídy, které zvládnou jakýkoli problém.

    Objekt fmExampie formálně odkazuje na prvky programu zvané proměnné. Proto se před deklarací objektu objeví vyhrazené slovo var (z anglických proměnných - proměnné).

    Prvky programu jsou jeho minimální nedělitelné části, které pro kompilátor stále mají určitou hodnotu. Mezi prvky patří:

    vyhrazená slova;

    identifikátory;

    typy;

    konstanty;

    proměnné;

    štítky;

    podprogramy;

    komentáře.

    Vyhrazená slova jsou anglická slova, která kompilátoru říkají, aby něco udělal. Vyhrazená slova nelze v programu použít pro jiné účely, než pro které jsou určena. Například vyhrazené slovo begin znamená pro překladač začátek složeného příkazu. Programátor nemůže v programu vůbec vytvořit proměnnou s názvem start, konstantu začátku, štítek začátku nebo jakýkoli jiný prvek programu s názvem begin.

    Identifikátory jsou slova, která programátor používá k označení jakéhokoli jiného prvku programu kromě vyhrazeného slova, identifikátoru nebo komentáře. Identifikátory Pascal objektu mohou sestávat z latinských písmen, arabských číslic a znaku podtržítka. Do identifikátoru nelze zahrnout žádné další znaky ani speciální znaky. Z tohoto jednoduchého pravidla vyplývá, že identifikátory se nemohou skládat z několika slov (nemůžete použít mezeru) ani obsahovat znaky cyrilice (ruštiny).

    Typy jsou speciální jazykové konstrukce, které kompilátor považuje za vzory pro konstrukci dalších prvků programu, jako jsou proměnné, konstanty a funkce. Libovolný typ definuje dvě věci, které jsou důležité pro kompilátor: množství paměti přidělené pro uložení prvku (konstanta, proměnná nebo výsledek vrácený funkcí) a sada povolených akcí, které může programátor provádět na prvcích tohoto typu . Všimněte si, že jakýkoli programátorem definovaný identifikátor musí být popsán v sekci popisu (před začátkem spustitelných příkazů). To znamená, že kompilátor musí znát typ (vzor), kterým je prvek identifikovaný identifikátorem vytvořen.

    Konstanty definují oblasti paměti, které nemohou během provádění programu měnit svou hodnotu. Stejně jako jakýkoli jiný prvek programu mohou mít konstanty svá vlastní jména. Před deklarací jmen konstant musí předcházet vyhrazené slovo const (z angličtiny. Constants - constants). Můžete například definovat konstanty const

    Kbyte \u003d 1024;

    Mbyte \u003d Kbyte * Kbyte;

    Gbyte \u003d 1024 * Mbyte;

    takže místo dlouhých čísel

    1048576 (1024 * 1024) a 1073741824

    (1024 * 1024 * 1024) zapisují Mbyte a Gbyte. Typ konstanty je určen způsobem jejího zápisu a je snadno rozpoznatelný kompilátorem v textovém programu; programátor proto nemusí používat pojmenované konstanty (tj. Nedefinovat je v programu explicitně).

    Proměnné jsou spojeny s proměnlivými oblastmi paměti, to znamená s takovými částmi paměti, jejichž obsah se bude v průběhu programu měnit. Na rozdíl od konstant jsou proměnné vždy deklarovány v programu. K tomu se za identifikátor proměnné vloží dvojtečka a název typu, na jehož obrázku by měla být proměnná vytvořena. Za deklarací proměnných musí být uvedeno slovo var. Například:

    var

    inValue: Integer;

    byValue: Byte;

    Zde je identifikátor inValue deklarován jako celočíselná proměnná a identifikátor byValue je deklarován jako bajtová proměnná. Standardní (tj. Předdefinované v Object Pascal) typu celé číslo definuje čtyřbajtový blok paměti, jehož obsah je považován za celé číslo v rozsahu -2 147 483 648 až +2 147 483 647, a standardní typ Byte je kus paměť o délce 1 bajt, která obsahuje celé číslo bez znaménka v rozsahu od 0 do 255 4. Veškeré informace týkající se rozsahu možných hodnot a velikosti paměti standardních typů se týkají Delphi 32. U 16bitové verze 1 mají tyto hodnoty různé významy, například typ Integer ve verzi 1 má 2 bantas a má rozsah hodnot od -32 768 do +32 767.

    Štítky jsou názvy operátorů programů. Štítky se používají velmi zřídka a pouze proto, aby programátor mohl kompilátoru sdělit, který programový příkaz má být proveden jako další. Štítky, stejně jako proměnné, jsou vždy deklarovány v programu. Sekce deklarace štítku předchází označení vyhrazeného slova.

    Subrutiny jsou speciálně navržené fragmenty programu. Pozoruhodnou vlastností podprogramů je jejich významná nezávislost na zbytku textu programu. Říká se, že vlastnosti podprogramu jsou lokalizovány v jeho těle. To znamená, že pokud programátor něco změní v podprogramu, obvykle v tomto ohledu nemusí nic měnit mimo podprogram. Podprogramy jsou tedy prostředkem strukturování programů, tj. Rozdělování programů na řadu převážně nezávislých fragmentů. Strukturování je pro velké softwarové projekty nevyhnutelné, proto se v programech Delphi velmi často používají podprogramy.

    Objekt Pascal má dva druhy podprogramů: procedury a funkce. Funkce se liší od procedury pouze v tom, že její identifikátor lze použít ve výrazech spolu s konstantami a proměnnými, protože funkce má výstupní výsledek určitého typu. Je-li například funkce definována

    Funkce MyFunction: Integer;

    a variabilní var

    X: Celé číslo;

    pak je možný následující operátor přiřazení:

    X: \u003d 2 * MyFunction-l;

    Název procedury nelze použít ve výrazu, protože procedura nemá žádný přidružený výsledek:

    Postup MyProcedure;

    :

    X: \u003d 2 * MyProcedure-l; // Chyba!

    2.2 C ++

    C ++, rozšíření jazyka C, vyvinul Bjorn Stroustrop, výzkumný pracovník společnosti AT&T Bell Laboratories (New Jersey, USA) v roce 1979. C ++ obsahuje vše, co je v C. Ale také podporuje objektově orientované programování (OOP). C ++ byl původně vytvořen, aby usnadnil vývoj velkých programů. Objektově orientované programování je nový přístup k programování.

    S výjimkou drobných detailů je C ++ nadmnožinou programovacího jazyka C. Kromě výkonu C poskytuje C ++ flexibilní a efektivní prostředky k definování nových typů. Použitím nových definic typů, které úzce odpovídají koncepcím aplikace, může programátor rozdělit vyvíjený program na snadno ovladatelné části. Tato metoda vytváření programů se často označuje jako abstrakce dat. Informace o typu jsou obsaženy v některých objektech uživatelem definovaných typů. Takové objekty lze snadno a spolehlivě použít v situacích, kdy jejich typ nelze určit v době kompilace. Programování s takovými objekty se často označuje jako objektově orientované. Při správném použití vytváří tato metoda kratší, srozumitelnější a snáze ovladatelné programy.

    Klíčovým konceptem v C ++ je třída. Třída je uživatelem definovaný typ. Třídy poskytují skrytí dat, zaručenou inicializaci dat, implicitní převod typů pro uživatelem definované typy, přiřazení dynamického typu, správu paměti řízenou uživatelem a mechanismy přetížení operace. C ++ poskytuje mnohem lepší prostředky než C pro vyjádření modularity programu a kontroly typu. Existují také vylepšení, která přímo nesouvisí s třídami v jazyce, včetně symbolických konstant, substituce vložených funkcí, výchozích parametrů funkcí, přetížených názvů funkcí, operací správy volné paměti a typů odkazů. C ++ si zachovává schopnosti jazyka C pro práci s hlavními hardwarovými objekty (bity, bajty, slova, adresy atd.). Díky tomu je velmi efektivní implementovat typy definované uživatelem.

    C ++ a jeho standardní knihovny jsou navrženy pro přenositelnost. Aktuální implementace jazyka bude probíhat na většině systémů, které podporují C. Z programů C ++ můžete používat knihovny C a v C ++ můžete používat většinu nástrojů podporujících programování C.

    Program C ++ se obvykle skládá z velkého počtu zdrojových souborů, z nichž každý obsahuje popisy typů, funkcí, proměnných a konstant. Aby bylo možné použít název v různých zdrojových souborech k odkazování na stejný objekt, musí být popsán jako externí. Například:

    externí dvojitý sqrt (dvojitý);

    extern instream cin;

    Nejběžnějším způsobem, jak zajistit konzistenci zdrojových souborů, je vložit takové popisy do samostatných souborů nazývaných soubory záhlaví (nebo záhlaví) a poté zahrnout, tj. Zkopírovat, tyto soubory záhlaví do všech souborů, kde jsou tyto popisy potřeba. Pokud je například popis sqrt uložen v souboru záhlaví pro standardní matematické funkce math.h a chcete extrahovat druhou odmocninu 4, můžete napsat:

    #zahrnout

    //…

    x \u003d sqrt (4);

    Protože běžné záhlaví je obsaženo v mnoha zdrojových souborech, neobsahuje popisy, které by se neměly opakovat. Například těla funkcí jsou uvedena pouze pro vložené funkce (viz tato klauzule) a inicializátory jsou uvedeny pouze pro konstanty (viz tato klauzule). Kromě těchto případů je soubor záhlaví úložiště informací o typu. Poskytuje rozhraní mezi samostatně sestavenými částmi programu.

    V příkazu include například název souboru uzavřený v hranatých závorkách odkazuje na soubor tohoto jména ve standardním adresáři (často / usr / include / CC); soubory umístěné jinde jsou odkazovány pomocí jmen uzavřených do uvozovek.

    Například:

    #include "math1.h"

    #include "/usr/bs/math2.h"

    bude obsahovat math1.h z adresáře aktuálního uživatele a math2.h z / usr / bs.

    Zde je velmi malý kompletní ukázkový program, ve kterém je řetězec definován v jednom souboru a vytištěn v jiném. Soubor header.h definuje požadované typy:

    // header.h

    extern char * prog_name;

    extern void f ();

    Soubor main.c obsahuje hlavní program:

    // main.c

    #include "header.h"

    char * prog_name \u003d "pěkné, ale úplné";

    hlavní ()

    {

    f ();

    }

    a soubor f.c vytiskne řádek:

    // f.c

    #zahrnout

    #include "header.h"

    void f ()

    {

    cout<< prog_name << «\n»;

    }

    Program můžete zkompilovat a spustit takto:

    $ CC main.c f.c - hloupě

    $ hloupý

    dobré, ale úplné

    $

    Jazyk, který podporuje technologii lokalizace dat, abstrakci dat a objektově orientované programování, aby byl univerzálním jazykem, musí také:

    Být implementovány na tradičních počítačích;

    Běh v prostředí tradičních operačních systémů;

    Buďte konkurenceschopní s tradičními programovacími jazyky z hlediska efektivity provádění programu;

    Vhodné pro většinu možných aplikací.

    To znamená, že musí být zahrnuty nástroje pro efektivní numerické aplikace (plovoucí aritmetika bez režie, jinak bude Fortran atraktivnější). Musí být povoleny funkce přístupu do paměti (což je nutné pro zápis ovladačů). Měly by existovat příležitosti pro volání funkcí (volání-volání) v souladu s rozhraními konkrétních operačních systémů. A navíc by mělo být možné odkazovat na funkce napsané v jiných jazycích a naopak, na funkce psané v objektově orientovaných jazycích z jiných jazyků.

    Tabulka 1 ukazuje výhody a nevýhody objektově orientovaných jazyků.

    Tabulka 1 - Výhody a nevýhody objektově orientovaných jazyků

    profesionálové

    Minusy

    Třídy umožňují konstruovat z užitečných komponent pomocí jednoduchých nástrojů, což umožňuje abstrahovat od podrobností implementace

    Pochopte základní pojmy, jako jsou třídy, dědičnost a dynamické propojení

    Data a operace společně tvoří určitou entitu a nejsou „rozmazané“ v celém programu, jak tomu často je v případě procedurálního programování

    Znovu použitelnost vyžaduje, aby se programátor seznámil s knihovnami velkých tříd

    Lokalizace kódu a dat zlepšuje viditelnost a udržovatelnost softwaru

    Navrhování tříd je mnohem obtížnější než jejich používání

    Zapouzdření informací chrání vaše nejdůležitější data před neoprávněným přístupem.

    Je velmi obtížné studovat třídy, aniž byste je mohli „cítit“.

    Poskytuje schopnost vytvářet rozšiřitelné systémy

    Neúčinnost alokace paměti

    Objektově orientovaná technologie zapojuje uživatele do zlepšeného výkonu během celého životního cyklu softwaru, což má za následek skutečnou návratnost investic. Zvýšeného výkonu je dosaženo čtyřmi základními vlastnostmi objektově orientovaných systémů a výslednými výhodami:

    použití objektů jako základních modelů umožňuje uživateli modelovat složité systémy reálného světa;

    flexibilita objektově orientovaných textů se promítá do rychlé reakce na změny požadavků uživatelů;

    opětovné použití standardních komponent zkracuje dobu vývoje nových problémů s aplikací i množství generovaného kódu;

    díky jednoduchosti je software flexibilnější a snižuje provozní náklady.

    Spolu s těmito jasnými výhodami usnadňuje vývoj softwaru krok za krokem použití objektově orientovaných jazyků a programovacích prostředí. Rychlé prototypování rozhraní umožňuje testování odpovědí uživatelů nezávisle na hlavní části aplikace. Význam tohoto přístupu je nejvíce patrný u projektů, jejichž aplikační úkoly nejsou jasně definovány nebo obtížně srozumitelné.

    V současné době existuje několik objektivních odhadů zvýšení produktivity vzhledem k tomu, že většina projektů souvisejících s objektově orientovanými systémy je v raných fázích. Jedna ze společností, společnost STC Technology (UK), která provedla srovnávací hodnocení, spočítala, že vývojová fáze objektově orientovaného projektu trvá v tradičním systému polovinu času podobného úkolu a vyžaduje čtvrtinu počtu osobohodin.

    První hlavní výhoda objektově orientovaných systémů vyplývá z povahy jejich vztahu k reálnému světu. Vývojář může navrhnout fyzický systém do softwarového, přičemž nejprve definuje všechny důležité fyzické objekty a jim odpovídající softwarové objekty. Skupiny souvisejících fyzických objektů jsou mapovány do tříd, které lze uspořádat do hierarchie počínaje obecnými třídami a přidáním specializovaných podtříd k nim. Procedury společné pro více tříd se nacházejí a zdědí jejich společná nadtřída.

    Například v měřicím systému vyvinutém společností Combuston Engineering (Columbus, Ohio) je skupina senzorů namapována na třídu Sensor, která definuje obecné vlastnosti všech senzorů. Podtřídy jsou definovány pro každý typ senzoru v systému, například optický nebo infračervený. Zdědí obecné postupy, které platí pro všechny senzory, a obsahují další postupy, které platí pouze pro optické nebo infračervené senzory.

    Objektově orientovaný přístup zužuje koncepční propast mezi reálným světem a počítačovým modelem. Umožňuje analytikům a návrhářům jasně pochopit strukturu systému. Jak poznamenává jeden uživatel: „Dokážu prezentovat své myšlenky v textu programu tak, jak si myslím.“ Proto se dnes objektově orientované systémy používají k modelování složitých fyzických systémů ve výrobních, telekomunikačních a vojenských a obranných komplexech.

    Druhá výhoda objektově orientovaných systémů pochází ze způsobu, jakým objekty komunikují prostřednictvím zpráv. Ve výše uvedeném příkladu lze na všechny senzory v systému odesílat obecné zprávy, jako je „zahájení měření“; každý z nich reaguje konkrétním způsobem. Pokud je jeden z fyzických senzorů zastaralý, je vyměněn. Současně se mění také odpovídající třída systému: pro nový typ snímače je zavedena nová třída obsahující postupy specifické pro nový snímač. Nová třída dědí zbytek postupů, které potřebuje, ze supertřídy. Když nový senzor obdrží obecnou zprávu, odpoví odpovídajícím způsobem. Celé tělo systému a obecné zprávy zůstanou nezměněny.

    Flexibilita objektově orientovaných systémů je nepopiratelnou výhodou pro uživatele v rychle se měnících prostředích, jako je programovací technologie. Například společnost Computer Science Corporation použila objektově orientovaný jazyk Smalltalk k vývoji produktu Design Generator. Společnost poznamenává, že díky objektově orientované technologii mají vývojáři softwaru schopnost rychle reagovat na nové tržní trendy ve stále konkurenčním prostředí.

    Třetí výhodou objektově orientovaných systémů je, že třídy mohou zdědit procedury z jiných tříd. Společnost může sestavit knihovny nejčastěji používaných tříd obsahující procedury určené pro specifické potřeby a použité v následných aplikovaných úkolech. Například softwarová společnost může vytvořit knihovnu tříd pro grafická primitiva, jako je válec, kužel nebo koule. Tvoří základ pro podtřídy jako zkosení nebo řez. Opětovné použití zdrojového kódu zkracuje dobu vývoje a umožňuje návrhářům spolehlivě řešit problémy v různých oblastech.

    V minulosti knihovny podprogramů používali vývojáři softwaru k řešení běžných problémů, jako jsou matematické výpočty. Objektově orientované systémy poskytují širší škálu opakovaně použitelných textů programů. Jeden z prvních uživatelů, Cadre Technologies, vypočítal, že objem kódu pro novou aplikaci je při použití objektově orientovaných programů snížen o poměr 5: 1.

    Knihovny funkcí lze také zakoupit od prodejců třetích stran. V současné době je nejoblíbenější nákup takových knihoven tříd pro vytváření uživatelských rozhraní s ikonami. Navrhovat a psát taková rozhraní od začátku není snadný úkol. Společnosti jako Apple a Whitewater Group poskytují sady nástrojů pro rychlé vytváření takových rozhraní na základě několika základních tříd, jako jsou Window, Menu, ScrollBar a Icon. Uživatelé mohou používat obě tyto třídy a jejich podtřídy, které přidávají do rozhraní například speciální ikony.

    Čtvrtou výhodou je způsob, jakým jsou sdružovány objektově orientované softwarové moduly. Tradiční software se skládá z dat a postupů, které přistupují a upravují data. Data a postupy jsou seskupeny samostatně, takže změna datové struktury ovlivní různé moduly napsané různými uživateli. V objektově orientovaném systému jsou data a postupy považovány společně za součást jednoho balíčku - objektu. Když se data změní, všechny příslušné postupy jsou snadno identifikovatelné a mění se současně. Vzhledem k tomu, že změna ovlivňuje pouze jednu oblast systému, jsou sníženy její vedlejší účinky na celý systém.

    Je známo, že náklady na údržbu tvoří až 80% nákladů životního cyklu programovacího systému. Vývojáři velkých komplexních systémů, kteří často čelí potřebě jejich úpravy, mají tendenci používat OOS jako jeden ze způsobů, jak snížit náklady na údržbu a zvýšit spolehlivost svých produktů. Například Wild Leitz (Toronto, Kanada) použil k vývoji geografického informačního systému objektově orientovaný jazyk Objective-C. Společnost našla zdrojový kód v tomto jazyce snadněji udržovatelný, protože jde o kratší, izolované „věci samy o sobě“, což snižuje dopad změny jednoho modulu na zbytek systému.

    Správně navržené programy by měly nejen splňovat jejich funkční požadavky, ale také mít takové vlastnosti jako:

    opětovné použití;

    rozšiřitelnost;

    odolnost vůči nesprávným údajům;

    konzistence.

    Správný objektově orientovaný styl programování zajišťuje přítomnost těchto vlastností. Vysvětlíme to na příkladu systémové vlastnosti.

    Program má vlastnost konzistence, pokud je použitelný jako zobecněný operátor ve „programování velkých bloků“. Programování velkých bloků je systematické používání dříve vyvinutých velkých softwarových jednotek (jako jsou třídy, subsystémy nebo moduly) při vývoji nových softwarových systémů.

    Omezení moderních objektově orientovaných systémů (OOS) většinou souvisí s jejich nedokonalostí. Překonání těchto omezení je výzvou pro dodavatele softwaru a možnost vstupu nových prodejců na trh. Tato kapitola pojednává o výzvách vývoje objektově orientovaných systémů a poskytuje časovou osu pro překonání jejich slabin.

    Hlavní překážkou objektově orientovaných systémů je dnes odpor technických a řídících pracovníků. Tato odolnost je přirozená vzhledem k nedokonalostem mnoha objektově orientovaných produktů na současném trhu. Nedokonalost ukazuje příklad řady problémů spojených s většinou nových technologií:

    omezený přístup na řadu standardních platforem;

    potřeba integrace se stávajícími systémy a databázemi;

    nedostatek softwaru pro programování rozsáhlých systémů.

    Úspěch objektově orientované technologie je poháněn jejím pronikáním do hlavního proudu počítačového průmyslu. Aby se tak stalo, je třeba řešit výše uvedené problémy. Je to ale poměrně nákladný a časově náročný úkol. Někteří z prvních prodejců objektově orientovaných systémů si přidali problémy tím, že si jako základ svých produktů vybrali nestandardní patentované jazyky. Po přijetí velkých kapitálových investic budou tyto společnosti čelit velkým problémům v boji o obsazení své mezery na trhu.

    Objektově orientovaný jazyk nemůže být zcela založen na mechanismech, které nejsou efektivně implementovány v tradičních architekturách, a že se stále uvažuje o použití takového jazyka jako jazyka pro všeobecné účely. Totéž lze říci o uvolňování paměti, což může být překážka výkonu a přenositelnosti. Většina objektově orientovaných jazyků používá sběr odpadků ke zjednodušení problémů programátora a ke snížení složitosti samotného jazyka a kompilátoru. Mělo by však být možné použít uvolňování paměti v nekritických situacích, ale v případě potřeby si zachovat kontrolu nad pamětí. Alternativou je jazyk, který není shromažďován, ale umožňuje navrhnout typy, které spravují paměť, kterou používají. Příkladem je C ++.

    Zpracování výjimek a konkrétní použití zdrojů jsou také výzvou. Jakákoli jazyková funkce, která je implementována pomocí linkeru, pravděpodobně představí také problém s mobilitou.

    Alternativou k zahrnutí funkcí nízké úrovně do jazyka je použití specializovaných jazyků nízké úrovně v kritických případech.

    Objektově orientované programování je programování, které využívá mechanismus dědičnosti. Abstrakce dat je programování pomocí typů definovaných uživatelem. Až na několik výjimek objektově orientované programování může a mělo by být zobecněním abstrakce dat.

    Aby byl tento mechanik efektivní, potřebuje správnou jazykovou podporu. Pro abstrakci dat postačuje pouze jazyková podpora; objektově orientované programování vyžaduje softwarové prostředí celého systému. Aby měl jazyk vlastnosti univerzálního jazyka, musí být schopen využívat tradiční hardware.


    Postava: 3. Zjednodušené schéma organizace vícemodulového systému pro práci s geometrickými objekty

    Vícemodulová struktura systému má následující výhody.

    Rozšiřitelnost Přidávání nových tříd a jejich interakcí se neprovádí přepsáním existujícího kódu, ale vývojem nových modulů.

    Opakovaně použitelný kód. Modul GeometricObjects lze zahrnout do libovolné aplikace, pokud existují také ukázková okna - můžete také povolit vizualizaci.

    Možnost postupného provádění programů. První vydání tedy může obsahovat GeometricObjects, DemonstrationWindows a Rendering, druhé přidá výpočty atd.

    Možnost využití metody výroby dopravníku, „paralelizace“ procesu vývoje softwaru.

    Existuje několik důvodů, proč C ++ nelze považovat za dynamický programovací jazyk.

    Statické rozhraní a implementace třídy. Rozhraní třídy se chápe jako kolekce jejích atributů a metod (specifikovaných popisem třídy, obvykle umístěných v souboru záhlaví) a implementace je specifický kód prováděný při volání těchto metod. První i druhý musí být definovány ještě před zahájením kompilace, nemůžete přidat proměnnou nebo metodu do třídy za běhu, přepsat existující.

    Ale při vývoji nových modulů je neustále nutné měnit existující třídy! Při vývoji výpočtů tedy budete možná potřebovat funkce, které vypočítají délku čáry, její zakřivení v určitém bodě, plochu obrázku. Při vývoji vizualizace může existovat potřeba takových proměnných, jako je barva, tloušťka čáry, pro ploché postavy je často nutné sestavit triangulaci (rozdělení na trojúhelníky). Výše uvedené funkce navíc významně závisí na typu objektu: musí být zapsány samostatně pro obdélníky, kruhy a libovolné geometrické objekty.

    Statická kontrola typu.

    Při analýze výrazu p-\u003e f () musí překladač „mít jistotu“, že objekt, na který odkazuje p, skutečně obsahuje metodu f (). Dokonce ani šablony (šablony) ne vždy pomáhají vytvářet kód, který zpracovává různé typy objektů: ve fázi kompilace a sestavení musíte vědět, které z nich musíte nainstalovat, který se použije v každém konkrétním případě. Vyzkoušejte úkol v seznamu 1 beze změny tříd nebo použití konstrukcí if-then-else + dynamic_cast.

    /*

    Výpis 1. Statické psaní omezuje použití polymorfismu

    */

    třída baseclass ();

    třída A: veřejná základní třída

    {

    veřejnost:

    A ();

    // třída A obsahuje metodu void f ()

    virtuální prázdno f ();

    };

    třída B: veřejná základní třída

    {

    veřejnost:

    B ();

    // třída B neobsahuje metodu void f ()

    };

    třída C: veřejná základní třída (...);

    /*

    Je nutné psát

    (beze změny výše uvedených tříd a bez použití if-then-else + dynamic_cast):

    */

    bool CallF (základní třída * p)

    {

    /*

    pokud je definováno p-\u003e f (), zavolejte tuto funkci a vraťte true,

    jinak - vrátit false

    */

    }

    C ++ nabízí tři způsoby implementace funkce CallF. Prvním (nejčastěji používaným) je přidání metody bool f () do základní třídy v těch podtřídách, kde to dává smysl - proveďte potřebné akce a vraťte true, ve zbytku - return false. Druhým je vytvoření třídy baseclass_f: public baseclass, zdědit z ní všechny třídy obsahující f () a použít dynamic_cast< baseclass_f *> ... Třetí je notoricky známý if-then-else + dynamic_cast ve CallF. První možnost vede k ucpání základní třídy, navíc nemusí být základní třída k dispozici (například obsažená v „uzavřeném“ modulu). Druhá vyžaduje redesign celého objektového systému. A pokud potřebujete napsat CallG, CallH? C ++ samozřejmě podporuje vícenásobnou dědičnost, ale s tímto přístupem se hierarchie tříd stane mnohem komplikovanější a nejde o změnu tam a zpět. Nevýhody třetí metody byly diskutovány mnohokrát: CallF bude muset být přepsán pokaždé, když se objeví nová třída, která podporuje f ().

    Neschopnost měnit jednotlivé objekty třídy za běhu. Zdálo by se, že pokud objekty patří do stejné třídy, měly by se chovat stejně. Pokud vám stávající třída s něčím nevyhovuje - „zdědějte“ a změňte tam, co chcete. Schopnost dynamicky měnit jednotlivé objekty třídy je však často velmi užitečná. Dědičnost je samozřejmě flexibilní a pohodlný způsob, jak změnit funkčnost tříd. Ale po vytvoření objektu již není možné měnit jeho metody, přidávat nové metody a proměnné. Chcete-li to provést, musíte odstranit existující objekt a poté vytvořit nový. V takovém případě se musíte postarat o aktualizaci všech ukazatelů na tento objekt a zachování jeho vlastností. Kromě toho, pokud zakaždým vytvoříte nové třídy, jejich počet může přesahovat všechny rozumné hranice.

    Závěr

    Nejběžnějším objektově orientovaným programovacím jazykem je zdaleka C ++. Zdarma komerční programovací systémy C ++ existují prakticky na jakékoli platformě. Volně distribuovaný programovací systém G ++ je široce známý, což umožňuje každému analyzovat dostatečně dobře a podrobně komentovat zdrojový kód jednoho z příkladných překladačů C ++. Hlavní myšlenky objektově orientovaného přístupu jsou založeny na následujících ustanoveních: program je modelem nějakého skutečného procesu, který je součástí skutečného světa; model reálného světa nebo jeho části lze popsat jako soubor interagujících objektů; objekt je popsán sadou parametrů, jejichž hodnoty určují stav objektu a sadou operací (akcí), které objekt může provádět; interakce mezi objekty se provádí zasíláním zvláštních zpráv z jednoho objektu do druhého. Zpráva přijatá objektem může vyžadovat provedení určitých akcí, jako je změna stavu objektu; Objekty popsané stejnou sadou parametrů a schopné provádět stejnou sadu akcí jsou třídou objektů stejného typu.

    Z hlediska programovacího jazyka lze třídu objektů zobrazit jako datový typ a jednotlivý objekt jako vztažný bod tohoto typu. Definování vlastních tříd objektů pro konkrétní sadu úkolů programátorem by mělo umožnit popis jednotlivých úkolů z hlediska samotné třídy úkolů (s vhodným výběrem typů a názvů objektů, jejich parametrů a akcí).

    Objektově orientovaný přístup tedy předpokládá, že při vývoji programu musí být definovány třídy objektů použitých v programu a vytvořeny jejich popisy, poté jsou vytvořeny instance potřebných objektů a je určena interakce mezi nimi.

    Často je vhodné konstruovat třídy objektů tak, aby tvořily hierarchickou strukturu.

    Je zřejmé, že k produktivnímu použití objektového přístupu k vývoji programu jsou zapotřebí programovací jazyky, které tento přístup podporují, tj. umožňující sestavit popis tříd objektů, generovat data typů objektů, provádět operace s objekty. Jedním z prvních takových jazyků byl jazyk SmallTalk, ve kterém jsou všechna data objekty některých tříd, a systém obecných tříd je postaven jako hierarchická struktura založená na předdefinovaných základních třídách.

    Zkušenosti s programováním ukazují, že jakýkoli metodický přístup v programovací technologii by neměl být aplikován slepě, ignorujíc další přístupy. To platí také pro objektově orientovaný přístup. Existuje řada typických problémů, u nichž je jeho užitečnost nejzřetelnější; tyto problémy zahrnují zejména problémy simulačního modelování, programování dialogů s uživatelem. Existují také úkoly, při nichž použití objektového přístupu nepovede k ničemu jinému než ke zbytečným nákladům na pracovní sílu. V tomto ohledu jsou nejrozšířenější objektově orientované programovací jazyky, které umožňují kombinovat objektový přístup s jinými metodikami. V některých jazycích a programovacích systémech je použití objektového přístupu omezeno pomocí uživatelského rozhraní (například dřívější verze Visual FoxPro).

    Seznam použité literatury

  1. Arkhangelsky A. Programování v Delphi pro Windows. Verze 2006, 2007, Turbo Delphi + CD. –M.: Binom. Znalostní laboratoř, 2006.

    Arkhangelskiy A. C ++ jazyk v C ++ Builderu. Referenční a metodická příručka. - M.: Binom. Znalostní laboratoř, 2008.

    Bucknell J. Základní algoritmy a datové struktury v Delphi. Programátorova knihovna.-SPB.: Peter, DiaSof, 2006.

    Galiseev G.V. Součásti v Delphi 7. Profesionální práce. –M. :: Williams, 2006.

  2. Gamma E. Metody objektově orientovaného designu. Designové vzory. S. Petersburg: Peter, 2006.
    Vyřešit problém na základě textu Hammurabiho zákonů o zdokonalení účtování o dlouhodobém majetku zemědělského podniku Jaký je časový rámec pro inventarizaci dlouhodobého majetku?

    2014-05-28