Menu
Jest wolny
rejestracja
Dom  /  Internet/ Kiedy powstał c. Adventik to agencja cyfrowa z pełnym zakresem usług

Kiedy był ok. Adventik to agencja cyfrowa z pełnym zakresem usług

Jaki jest powód takiego statusu języka C? Historycznie język ten jest nierozerwalnie związany z salą operacyjną. Systemy uniksowe, która dzisiaj przeżywa swoje odrodzenie. Lata 60. były erą powstawania systemów operacyjnych i języków programowania wysokiego poziomu. W tym okresie system operacyjny i kompilatory były rozwijane niezależnie dla każdego typu komputera, a często nawet własnych języków programowania (przypomnijmy np. PL/I). Jednocześnie wspólność wynikających z tego problemów stała się już widoczna. Odpowiedzią na realizację tej społeczności była próba stworzenia uniwersalnego telefonu komórkowego system operacyjny, a to wymagało równie wszechstronnego i mobilnego języka programowania. C stał się takim językiem, a Unix stał się pierwszym systemem operacyjnym, który został prawie w całości napisany w języku wysokiego poziomu.

Bliski związek z Unixem dał C pole testowe, którego nie miał w tamtym czasie żaden inny język. Programowanie systemów było wówczas uważane za największe wyzwanie w branży. W większości były one tak zależne od maszyn, że wielu w ogóle nie myślało o swoim rozwiązaniu inaczej niż w asemblerze. Języki wysokiego poziomu były przeznaczone do programowania aplikacji i tylko w bardzo ograniczonym stopniu zaimplementowały funkcje niezbędne do system działa, a często tylko dla określonego typu maszyny.

Język C był tworzony od samego początku, aby można było w nim pisać zadania systemowe. Twórcy C nie opracowali abstrakcyjnego modelu executora języka, ale po prostu zaimplementowali w nim te możliwości, które były najbardziej potrzebne w praktyce programowania systemów. Były to przede wszystkim środki bezpośredniej pracy z pamięcią, strukturalne struktury kontrolne oraz modułowa organizacja programu. I właściwie nic więcej nie było zawarte w języku. Cała reszta została przeniesiona do biblioteki wykonawczej. Dlatego nieżyczliwi czasami odnoszą się do języka C jako zorganizowanego asemblera. Ale bez względu na to, o czym rozmawiali, podejście okazało się bardzo udane. Dzięki niemu nowy poziom przez stosunek prostoty i możliwości językowych.

Istnieje jednak inny czynnik, który zadecydował o sukcesie języka. Twórcy bardzo umiejętnie podzielili w nim właściwości zależne od maszyny i niezależne. Dzięki temu większość programów można pisać uniwersalnie – ich wydajność nie zależy od architektury procesora i pamięci. Kilka z tych samych, zależnych od sprzętu części kodu, można zlokalizować w osobnych modułach. Za pomocą preprocesora można tworzyć moduły, które po skompilowaniu na różnych platformach wygenerują odpowiedni kod zależny od maszyny.

Wiele kontrowersji wywołała składnia języka C. Zastosowane w nim techniki skrótów mogą sprawić, że program będzie całkowicie nieczytelny, jeśli będzie używany w nadmiernych ilościach. Ale, jak powiedział Dijkstra, - środków nie można winić za to, że są używane w sposób niepiśmienny. W rzeczywistości skróty składni zaproponowane w C odpowiadają najczęstszym stereotypowym sytuacjom w praktyce. Jeśli skróty są uważane za idiomy dla wyrazistego i zwięzłego przedstawienia takich sytuacji, to korzyści z nich płynące stają się bezwarunkowe i oczywiste.

Tak więc C pojawił się jako uniwersalny język programowania systemowego. Ale nie pozostał w tych ramach. Pod koniec lat 80. język C, wypychając Fortran jako lidera, zyskał ogromną popularność wśród programistów na całym świecie i zaczął być używany w wielu różnych zadaniach użytkowych. Znaczącą rolę odegrało tu rozpowszechnienie Unixa (a tym samym C) w środowisku uniwersyteckim, gdzie szkolono nowe pokolenie programistów.

Jak wszystkie języki, C było stopniowo ulepszane, ale większość ulepszeń nie miała radykalnego charakteru. Być może najistotniejsze z nich należy uznać za wprowadzenie ścisłej specyfikacji typów funkcji, co znacznie zwiększyło niezawodność interakcji międzymodułowej w C. Wszystkie takie ulepszenia zostały zapisane w normie ANSI z 1989 roku, która nadal definiuje język C.

Ale jeśli wszystko jest tak bezchmurne, to dlaczego wszystkie inne języki są nadal w użyciu, co wspiera ich istnienie? Piętą achillesową języka C było to, że okazał się on zbyt niski dla zadań, które zostały umieszczone na agendzie lat 90-tych. Co więcej, problem ten ma dwa aspekty. Z jednej strony w język wbudowano narzędzia zbyt niskopoziomowe - przede wszystkim pracuje z pamięcią i arytmetyką adresową. Nie bez powodu zmiana głębi bitowej procesorów jest bardzo bolesna dla wielu programów w C. Z drugiej strony w C brakuje udogodnień wysokiego poziomu - abstrakcyjnych typów danych i obiektów, polimorfizmu, obsługi wyjątków. W efekcie w programach w języku C technika realizacji zadania często dominuje nad jego stroną merytoryczną.

Pierwsze próby naprawienia tych niedociągnięć rozpoczęły się na początku lat osiemdziesiątych. Już wtedy Bjarne Stroustrup z AT&T Bell Labs zaczął opracowywać rozszerzenie języka C pod nazwą kodową. Styl programowania był dość zgodny z duchem, w jakim powstał sam język C – wprowadzono do niego pewne możliwości, aby uczynić więcej wygodna praca konkretne osoby i grupy. Pierwszy komercyjny tłumacz nowego języka o nazwie C++ pojawił się w 1983 roku. Był to preprocesor, który przetłumaczył program na kod C. Jednak faktyczne narodziny języka można uznać za wydanie książki Stroustrupa w 1985 roku. To właśnie od tego momentu C++ zaczął zdobywać popularność na całym świecie.

Główną innowacją w C++ jest mechanizm klas, który umożliwia definiowanie i używanie nowych typów danych. Programista opisuje wewnętrzną reprezentację obiektu klasy i zestaw funkcji-metod dostępu do tej reprezentacji. Jednym z cenionych celów przy tworzeniu C++ była chęć zwiększenia odsetka ponownego wykorzystania już napisanego kodu. Koncepcja klas sugerowała w tym celu mechanizm dziedziczenia. Dziedziczenie umożliwia tworzenie nowych (pochodnych) klas z rozszerzoną reprezentacją i zmodyfikowanymi metodami bez wpływu na skompilowany kod oryginalnych (podstawowych) klas. Jednocześnie dziedziczenie zapewnia jeden z mechanizmów implementacji polimorfizmu - podstawowej koncepcji programowania obiektowego, zgodnie z którą wykonać ten sam rodzaj przetwarzania różne rodzaje danych, można użyć tego samego kodu. Właściwie polimorfizm jest również jedną z metod zapewniających ponowne wykorzystanie kodu.

Wprowadzenie klas nie wyczerpuje wszystkich innowacji języka C++. Implementuje pełnoprawny mechanizm obsługi wyjątków strukturalnych, którego brak w C znacznie utrudniał pisanie niezawodnych programów, mechanizm szablonowania to wyrafinowany mechanizm generowania makr głęboko osadzony w języku, otwierający kolejną ścieżkę do ponownego wykorzystania kodu, i wiele więcej.

Zatem ogólna linia rozwoju języka miała na celu rozszerzenie jego możliwości poprzez wprowadzenie nowych konstrukcji wysokopoziomowych przy zachowaniu jak największej pełnej kompatybilności z operacjami ANSI C., tak aby programista faktycznie przestał pracować bezpośrednio z pamięcią i systemem- podmioty zależne. Język nie zawiera jednak mechanizmów zmuszających programistę do poprawnej struktury programu, a autorzy nie wydali żadnych systematycznych zaleceń dotyczących korzystania z jego dość wyrafinowanych konstrukcji. Nie zadbali o terminowe stworzenie standardowa biblioteka klasy, które implementują najpopularniejsze struktury danych.

Wszystko to doprowadziło do tego, że wielu programistów zostało zmuszonych do samodzielnego odkrywania labiryntów semantyki języka i samodzielnego poszukiwania pomyślnie działających idiomów. Tak więc na przykład na pierwszym etapie rozwoju języka wielu twórców bibliotek klas starało się zbudować pojedynczą hierarchię klas ze wspólną klasą bazową Object. Pomysł ten został zapożyczony z Smalltalk - jednego z najbardziej znanych języków obiektowych. Okazało się to jednak zupełnie nieopłacalne w C++ - dokładnie przemyślane hierarchie bibliotek klas były nieelastyczne, a praca klas nie była oczywista. Aby biblioteki klas były użyteczne, musiały zostać dostarczone w źródle.

Pojawienie się klas szablonowych całkowicie odrzuciło ten kierunek rozwoju. Zaczęli używać dziedziczenia tylko w tych przypadkach, gdy wymagane było wygenerowanie wyspecjalizowanej wersji istniejącej klasy. Biblioteki zaczęły składać się z oddzielnych klas i małych, niepowiązanych hierarchii. Jednak po drodze ponowne użycie kodu zaczęło spadać, ponieważ C++ nie może polimorficznie używać klas z niezależnych hierarchii. Powszechne stosowanie szablonów prowadzi do niedopuszczalnego wzrostu ilości kompilowanego kodu – nie zapominajmy, że szablony są implementowane za pomocą metod generowania makr.

Jedną z najtrudniejszych wad C++, odziedziczoną po składni C, jest to, że opis jest dostępny dla kompilatora. Struktura wewnętrzna wszystkich używanych klas. W konsekwencji zmiana wewnętrznej struktury reprezentacji klasy biblioteki prowadzi do konieczności ponownej kompilacji wszystkich programów, w których ta biblioteka jest używana. To znacznie ogranicza deweloperów bibliotek w zakresie ich modernizacji, ponieważ dzięki wydaniu Nowa wersja, muszą zachować zgodność binarną z poprzednim. To właśnie ten problem sprawia, że ​​wielu ekspertów uważa, że ​​C++ nie nadaje się do prowadzenia dużych i super-dużych projektów.

A jednak pomimo wymienionych niedociągnięć, a nawet niedostępności standardu językowego (to po ponad piętnastu latach użytkowania!), C++ pozostaje jednym z najpopularniejszych języków programowania. Jego siła tkwi przede wszystkim w prawie pełnej kompatybilności z językiem C. Dzięki temu programiści C++ mają dostęp do wszystkich rozwiązań wykonanych w C. Jednocześnie C++, nawet bez użycia klas , przynosi szereg takich ważnych dodatkowe możliwości oraz udogodnienia, z których wielu korzysta po prostu jako ulepszone S.

Dotyczący model obiektowy C++, o ile twój program nie jest bardzo duży (setki tysięcy wierszy), całkiem możliwe jest jego użycie. Ostatnio pojawiający się trend przejścia na komponent oprogramowanie tylko wzmacnia pozycję C++. Podczas opracowywania poszczególnych komponentów wady C++ jeszcze się nie pojawiają, a łączenie komponentów w działający system nie jest już wykonywane na poziomie języka, ale na poziomie systemu operacyjnego.

W świetle wszystkiego, co zostało powiedziane, perspektywy dla C++ nie wyglądają ponuro. Choć monopol na rynku języków programowania mu nie świeci. Być może możemy tylko śmiało powiedzieć, że język ten nie przetrwa kolejnej modernizacji-rozszerzenia. Nic dziwnego, kiedy pojawiła się Java, więc zwrócono na nią szczególną uwagę. Język, który jest zbliżony składnią do C++, co oznacza, że ​​wielu programistom wydaje się znajomy, został pozbawiony najbardziej rażących niedociągnięć C++, odziedziczonych z lat 70-tych. Wydaje się jednak, że Java nie spełnia roli, jaką niektórzy jej powierzyli.

Szczególna rola języków C/C++ we współczesnym programowaniu sprawia, że ​​podawanie konkretnych adresów w Internecie, pod którymi można znaleźć materiały na ich temat, niemal nie ma sensu. Takich miejsc jest po prostu zbyt wiele. Jeśli jednak chcesz dowiedzieć się więcej o ewolucji C++, zacznij od małego artykułu. http://citforum.syzran.ru/programming/prg96/76.shtml.

Aleksandrze Siergiejewu, [e-mail chroniony]
Artykuł z magazynu BYTE / Rosja, marzec 2000

Aby jasno zademonstrować wykorzystanie opisanych języków w praktyce, wybraliśmy problem, w którym ze standardowego wejścia lub z pliku trzeba było wpisać szereg liczb całkowitych, a następnie wyprowadzić tylko nieparzyste i odwrotnie zamówienie. Jest to jedno z najprostszych zadań, które w zasadzie wymaga pracy z tablicami, pętlami, rozgałęzieniami i we/wy do jego rozwiązania, a także pozwala zademonstrować wywołania podprogramów. Ponadto jest widoczny i łatwo dostrzegalny.

Lista 1.C

1 #zawiera / * Połącz funkcje wejścia-wyjścia * / 2 3 void main (void) 4 (5 int М; / * Tablica 10 liczb całkowitych, liczba od 0 * / 6 int N; 7 for (N = 0; N<10; ++N) /* Вводим не более 10 чисел */ 8 if (EOF == scanf ("%d, M+N)) 9 break; /* Если конец файла, прерываем цикл */ 10 11 for (-N; N>= 0; --N) / * Przejdź przez tablicę w odwrotnej kolejności * / 12 if (M [N]% 2) / * zamów i wypisz nieparzyste * / 13 printf ("% d \ n", M [N]); 14)

  • Linia 3. W C/C++ wykonywanie programu zawsze rozpoczyna się od funkcji main.
  • Linie 7 i 11. W nagłówku pętli ustawienie początkowe, warunek kontynuacji i reguła ponownego obliczania parametru pętli są określone średnikami. Operacje ++ oraz -/- - najsłynniejszy ze skrótów języka C, oznaczający przyrost i dekrementację zmiennej, czyli zwiększanie i zmniejszanie jej wartości o jeden.
  • Linia 8. Funkcjonować scanf wprowadza, zgodnie z formatem określonym przez pierwszy parametr, wartości zmiennych, których adresy są określone przez pozostałe parametry. Tutaj adres, pod którym wprowadzana jest wartość, jest obliczany za pomocą arytmetyki adresu, na adres lokalizacji tablicy m przesunięte przez n elementy. Ten sam efekt można uzyskać pisząc & M [N].
  • Linia 12. Operacja % oblicza pozostałą część podziału. Stan operatora Jeśli jest uważany za spełniony, jeśli wartość liczbowa wyrażenia jest niezerowa.
  • Linia 13. Funkcjonować printf- drukowanie według formatu działa w ten sam sposób scanf, ale zamiast adresów podaje wartości do wyświetlenia.
1 #zawiera 2 3 szablon class Array 4 (5 public: Array (T Size = 1): M (nowy T), N (rozmiar), n (0) () 6 Array (void) (usuń M;) 7 T Count (void) const ( return n;) 8 T operator (int i) const (zwróć M [i];) 9 void Add (T Data); 10 private: 11 T * M; // Adres przydzielonej pamięci 12 int N, n; // N - przydzielone, n - wykorzystane 13); 14 15 szablon nieważna tablica :: Add (T Data) 16 (if (N-n) // Jeśli wszystkie przydzielone 17 (int * P = new T; // spacja jest używana, przydziel więcej 18 for (int i = 0; i A; // Tablica liczb całkowitych o zmiennej wielkości 28 while (1) // Niekończąca się pętla 29 (int N; 30 cin >> N; // cin - standardowy strumień wejściowy 31 if (cin.eof ()) break; // Wyjście z pętla według końca pliku 32 A.Add (N); // Dodaj wprowadzoną liczbę do tablicy 33) 34 for (int N = A.Count () - 1; N> = 0; --N) // Przeprowadź pętlę tablica 35 if ( A [N]% 2) 36 cout<i zwalnia pamięć
  • Linie 3-13. Klasa szablonu jest zadeklarowana Szyk z parametrem T... Jest to tablica obiektów o zmiennej wielkości, takich jak T... Oczywiście w naszym zadaniu nie ma potrzeby używania klasy szablonu. Chcieliśmy jednak zademonstrować, jak tworzona jest polimorficzna struktura danych w C++, która może współpracować z dowolnym typem elementu.
  • Linia 5. Konstruktor klas. Inicjuje reprezentację obiektu. Na przykład w terenie m wprowadzany jest adres bloku pamięci zleconego przez operację; nowy T.
  • Linia 8. Przykład przeciążenia operacji. Funkcjonować operator zostanie wywołana, gdy na prawo od obiektu klasy pojawią się nawiasy kwadratowe Szyk.
  • Linia 9. Ta funkcja jest najważniejsza we wdrożeniu. Dodaje elementy do tablicy, rozszerzając ją w razie potrzeby. Ponieważ jest bardziej złożony niż inne, jego definicja została zaczerpnięta z opisu klasy. Funkcje opisane w ciele klasy są implementowane w C++ nie przez wywołanie, ale przez podstawienie wbudowane. Przyspiesza to program, chociaż zwiększa jego rozmiar.
  • Linie 15-24. Definicja funkcji Arrau :: Dodaj (T)(nawiasem mówiąc, to jej pełne imię i nazwisko).
  • Linia 27. Tworzymy obiekt typu Szyk... Wzornik Aggau sparametryzowany według typu int.

C ++ (czyta C-plus-plus) to skompilowany, statycznie typowany język programowania ogólnego przeznaczenia, w którym można tworzyć programy o dowolnej złożoności.
Od ponad 20 lat język ten znajduje się w pierwszej trójce najpopularniejszych i najbardziej poszukiwanych języków programowania. (Możesz to sprawdzić, odwiedzając stronę internetową TIOBE).
Język powstał na początku lat 80., kiedy pracownik Bell Labs, Björn Stroustrup, wymyślił szereg ulepszeń języka C, aby dostosować go do własnych potrzeb.

Bjarne Stroustrup - twórca języka C++

Stroustrup postanowił uzupełnić język C o możliwości języka Simula. C, jako podstawowy język systemu UNIX, na którym działały komputery Bell, jest szybki, bogaty w funkcje i przenośny. Stroustrup dodał do niego możliwość pracy z klasami i obiektami. W rezultacie praktyczne problemy modelowania okazały się dostępne do rozwiązania zarówno pod względem czasu rozwoju (dzięki zastosowaniu klas typu Simula), jak i czasu obliczeń (dzięki szybkości C).
Tak mówi o tym sam twórca języka:



W 1998 roku komitet normalizacyjny opublikował pierwszy standard językowy, znany jako C ++ 98. C++ wciąż ewoluuje, aby sprostać współczesnym wymaganiom. Jedną z grup, które opracowują język C++ i przesyłają sugestie dotyczące jego ulepszenia do Komitetu Normalizacyjnego C ++ jest Zwiększyć, która zajmuje się między innymi ulepszaniem możliwości języka poprzez dodawanie do niego funkcji metaprogramowania. Ostatni standard został wydany w 2017 roku i nosi nazwę C++ 17... Kolejny standard nie będzie długo czekać i pojawi się zgodnie z oczekiwaniami w 2020 roku.
Nikt nie posiada praw do języka C++, jest bezpłatny. W marcu 2016 roku w Rosji powstała grupa robocza WG21 C++. Grupa została zorganizowana w celu zbierania propozycji standardu C++, przesyłania ich do komitetu i obrony na walnych zebraniach Międzynarodowej Organizacji Normalizacyjnej.
C++ to język wieloparadygmatyczny (od słowa paradygmat - styl pisania programów komputerowych), który obejmuje szeroki wachlarz różnych stylów i technologii programowania. Często mówi się o nim jako o języku obiektowym, ale ściśle mówiąc tak nie jest. W trakcie pracy programista zyskuje absolutną swobodę w doborze narzędzi, aby problem rozwiązany przy użyciu tego czy innego podejścia został rozwiązany jak najefektywniej. Innymi słowy, C++ nie zmusza programisty do trzymania się tylko jednego stylu tworzenia programu (na przykład zorientowanego obiektowo).
C++ posiada bogatą bibliotekę standardową, która zawiera popularne kontenery i algorytmy, I/O, wyrażenia regularne, obsługę wielowątkowości i wiele innych. C++ wpłynął na wiele języków programowania, w tym: Java, C#, D. Ponieważ C++ należy do rodziny języków opartych na składni języka C, można łatwo opanować inne języki programowania z tej rodziny : JavaScript, PHP, Perl, Objective-C i wiele innych... inne, w tym sam język ojczysty - C. ()
W czasie swojego istnienia język C++ ugruntował stabilne mity, które łatwo można obalić (patrz tutaj: Część 1 i Część 2)

Historia języka i wydanie norm

1983

Twórca języka - Bjorn Stroustrup, pracownik Bell Labs, wprowadził wczesną wersję C++ („C z klasami”)

1985

Pierwsza komercyjna wersja C++, język przyjmuje swoją współczesną nazwę

1986

Pierwsze wydanie The C ++ Programming Language, książki o C ++ napisanej przez Björna Stroustrupa

1998

Ratyfikowano międzynarodowy standard języka C++: ISO/IEC 14882:1998 „Standard dla języka programowania C++”

2003
2005

Publikacja Bibliotecznego Raportu Technicznego 1 (TR1). Raport nie jest oficjalnie częścią standardu, ale opisuje rozszerzenia standardowej biblioteki, które powinny znaleźć się w następnej wersji języka C++.

2011

Wydanie nowego standardu - C++ 11 lub ISO/IEC 14882:2011; nowy standard zawierał dodatki do rdzenia języka i rozszerzenie standardowej biblioteki, w tym większość TR1

2014

Wydanie standardu C ++ 14 („Międzynarodowa norma ISO / IEC 14882: 2014 (E) Język programowania C ++”); C++ 14 można traktować jako małe rozszerzenie w stosunku do C++ 11, zawierające głównie poprawki błędów i drobne ulepszenia

2017

Wydano nowy standard - C++ 1z (C++ 17). Norma ta wprowadziła wiele zmian i uzupełnień. Na przykład STD zawiera biblioteki standardu C11, system plików oparty na boost :: filesystem, większość eksperymentalnej biblioteki TS I.

2020

C++ 20 to nieoficjalna nazwa standardu ISO/IEC dla języka programowania C++, który jest oczekiwany po C++ 17. Projekt normy N4800.

Filozofia C++

W The Design and Evolution of C ++ (2007) Björne Stroustrup opisuje zasady, którymi kierował się przy projektowaniu C ++ (w skrócie):

  • Uzyskaj ogólny język ze statycznymi typami danych, wydajnością i przenośnością języka C.
  • Bezpośrednio i kompleksowo wspieraj wiele stylów programowania.
  • Daj programiście swobodę wyboru, nawet jeśli daje mu to możliwość wybrania złego.
  • Zachowaj kompatybilność z C tak bardzo, jak to możliwe, umożliwiając w ten sposób łatwe przejście z programowania w C.
  • Unikaj pomyłek między C i C++: każda konstrukcja dozwolona w obu językach musi oznaczać to samo w każdym z nich i prowadzić do tego samego zachowania programu.
  • Unikaj funkcji, które są zależne od platformy lub nie są ogólne.
  • Nie płać za to, co nie jest używane — żadne narzędzie językowe nie powinno obniżać wydajności programów, które go nie używają.
  • Nie wymagaj zbyt skomplikowanego środowiska programistycznego.

C i C++

Składnia C ++ jest dziedziczona z języka C. Chociaż formalnie jedną z zasad C ++ pozostaje zachowanie zgodności z językiem C, w rzeczywistości grupy do standaryzacji tych języków nie wchodzą w interakcje, a wprowadzane przez nich zmiany nie tylko nie są ze sobą skorelowane, ale często fundamentalnie zaprzeczają sobie nawzajem ideologicznie. Na przykład elementy, które nowe standardy C dodają do jądra są elementami standardowej biblioteki w standardzie C++ i są całkowicie nieobecne w rdzeniu, na przykład tablice dynamiczne, tablice ze stałymi granicami, możliwości przetwarzania równoległego. Połączenie rozwoju tych dwóch języków byłoby bardzo korzystne, powiedział Stroustrup, ale jest mało prawdopodobne, aby było to politycznie wykonalne. Tak więc praktyczna kompatybilność między C i C++ będzie stopniowo tracona.
W tym przykładzie, w zależności od użytego kompilatora, wypisze „C++” lub „C”:

Program 9.1

#włączać int main () (printf ("% s \ n", (sizeof ("a")) == sizeof (char))? "C ++": "C"); return 0;)

Wynika to z faktu, że stałe znakowe w C są typu int, a w C++ są typu char, ale rozmiary tych typów są różne.

Modele cyklu życia aplikacji

Koło życia oprogramowanie to okres, który rozpoczyna się od momentu podjęcia decyzji o potrzebie stworzenia oprogramowania i kończy się w momencie jego całkowitego wycofania. Cykl ten to proces budowania i rozwijania oprogramowania (oprogramowania). Istnieje kilka modeli cyklu życia.
Model kaskadowy cykl życia (ang. model wodospadu) zaproponował w 1970 roku Winston Royce. Zapewnia sekwencyjną realizację wszystkich etapów projektu w ściśle określonej kolejności. Przejście do kolejnego etapu oznacza całkowite zakończenie prac na poprzednim etapie. Wymagania, określone na etapie tworzenia wymagań, są ściśle dokumentowane w postaci specyfikacji technicznych i są ustalone na cały okres rozwoju projektu. Każdy etap kończy się wydaniem kompletu dokumentacji wystarczającej do kontynuowania rozwoju przez inny zespół programistów.
Etapy projektu według modelu wodospadu:

  1. Formowanie wymagań;
  2. Projekt;
  3. Realizacja;
  4. Testowanie;
  5. Realizacja;
  6. Obsługa i konserwacja.

W modelu kaskadowym przejście z jednej fazy projektu do drugiej zakłada całkowitą poprawność wyniku z poprzedniej fazy. W dużych projektach jest to prawie niemożliwe do osiągnięcia. Dlatego ten model nadaje się tylko do opracowania małego projektu. (Sam W. Royce nie stosował się do tego modelu i stosował model iteracyjny).
Model iteracyjny
Alternatywą dla modelu kaskadowego jest model rozwoju iteracyjnego i przyrostowego (IID) uzyskany od T. Gilba w latach 70-tych. nazwa modelu ewolucyjnego. Model IID polega na rozbiciu cyklu życia projektu na serię iteracji, z których każda przypomina „mini-projekt”, w tym wszystkie procesy rozwoju zastosowane w celu stworzenia mniejszych fragmentów funkcjonalności w porównaniu z projektem jako całością. Celem każdej iteracji jest uzyskanie działającej wersji systemu oprogramowania, która zawiera funkcjonalność zdefiniowaną przez zintegrowaną zawartość wszystkich poprzednich i bieżących iteracji. Wynik końcowej iteracji zawiera wszystkie wymagane funkcjonalności produktu. Tym samym, wraz z zakończeniem każdej iteracji, produkt otrzymuje przyrost - przyrost - swoich możliwości, które w związku z tym rozwijają się ewolucyjnie.


Różne wersje podejścia iteracyjnego są zaimplementowane w większości nowoczesnych metodologii programistycznych:

Proces rozwoju - Rational Unified Process (RUP)

Racjonalny ujednolicony proces (RUP)(Lean Unified Process) to metodologia tworzenia oprogramowania obsługiwana przez firmę Rational Software (IBM). Metodologia dostarcza rekomendacji dla wszystkich etapów rozwoju: od modelowania biznesowego po testowanie i uruchomienie gotowego programu. Jako język modelowania używany jest Unified Modeling Language (UML).
Pełny cykl życia rozwoju produktu składa się z czterech faz, z których każda obejmuje jedną lub więcej iteracji.

  • Etap początkowy (Incepcja)
  • Określ zakres projektu i ilość wymaganych zasobów. Identyfikowane są podstawowe wymagania, ograniczenia i kluczowe funkcjonalności produktu. Ryzyka są oceniane. Planowanie działań. Pod koniec fazy wstępnej oceniany jest osiągnięcie Kamienia Milowego Celu Cyklu Życia, który zakłada porozumienie pomiędzy interesariuszami co do kontynuacji projektu.

  • Opracowanie
  • Wymagania dotyczące dokumentacji. Projektowanie, implementacja i testowanie architektury wykonywalnej. Wyjaśnienie warunków i kosztów. Zmniejszenie głównych zagrożeń. Pomyślne zakończenie fazy rozwoju oznacza osiągnięcie Kamienia Milowego Architektury Cyklu Życia.

  • Budowa
  • W fazie „Budowania” wdrażana jest większość funkcjonalności produktu: projekt aplikacji jest gotowy, kod źródłowy jest napisany. Faza kompilacji kończy się pierwszą zewnętrzną wersją systemu i kamieniem milowym początkowej zdolności operacyjnej.

  • Przemiana
  • W fazie „Wdrożenia” tworzona jest ostateczna wersja produktu i przekazywana od dewelopera do klienta. Obejmuje to program testów beta, szkolenie użytkowników i określenie jakości produktu. Jeżeli jakość nie spełnia oczekiwań użytkowników lub kryteriów ustalonych w fazie Start, faza Wdrożenia jest powtarzana. Osiągnięcie wszystkich celów oznacza osiągnięcie kamienia milowego Wprowadzania Produktu i ukończenie pełnego cyklu rozwoju.



"Technologia informacyjna. Inżynieria systemów i oprogramowania. Procesy cyklu życia oprogramowania ”. Norma ta została przyjęta przez Federalną Agencję Regulacji Technicznych i Metrologii Federacji Rosyjskiej i jest podobna do międzynarodowej normy ISO / IEC 12207: 2008. Norma ta ustanawia ogólne ramy dla procesów cyklu życia oprogramowania, którymi można kierować w branży oprogramowania. Norma nie oferuje konkretnego modelu cyklu życia. Jej postanowienia są wspólne dla wszystkich modeli cyklu życia, metod i technologii tworzenia oprogramowania. Opisuje strukturę procesów cyklu życia, nie precyzując, jak wdrożyć lub wykonać czynności i zadania zawarte w tych procesach.

Prezentacja lekcji
Tematy wiadomości
  • Fundacja Wolnego Oprogramowania (FSF)
  • Darmowe licencje na oprogramowanie
  • FreeSoftware i Open Source
  • Historia rozwoju języków programowania
  • Historia C. C i C ++
  • Fabuła
  • C++ krytyka
  • Historia UNIX-a
  • Model cyklu życia oprogramowania spiralnego
  • UML (angielski ujednolicony język modelowania)
  • Microsoft Solutions Framework
  • IDE do programowania w C / C ++ w systemie Windows
  • Kompilatory C/C++
  • Tworzenie aplikacji konsolowej w systemie Windows
pytania
  1. Dlaczego kaskadowy model tworzenia oprogramowania nie jest stosowany do dużych projektów?
  2. Jaka jest różnica między modelami kaskadowymi a iteracyjnymi?
  3. Wymień etapy tworzenia oprogramowania w metodologii Rational Unified Process (RUP)

Kiedy Twoja reputacja działa na Twój zysk

Zarządzanie społecznością

Tworzenie tonu głosu. Szybkie przetwarzanie zarówno negatywnych, jak i pozytywnych komentarzy w imieniu marki. Zarządzanie komunikacją według określonych scenariuszy. Emisja problematycznych momentów do klienta.

Agenci wpływu

Tworzenie i wdrażanie „wirtualów” na forach i portalach społecznościowych. Istnieje baza danych zaktualizowanych i rzeczywistych kont w ponad 300 witrynach.

Praca z recenzjami

Pisanie, uzgadnianie i publikowanie recenzji marki na najlepszych platformach i witrynach z recenzjami. Przetwarzanie i nakładanie negatywnych komentarzy na pozytywne. W rezultacie negatywy są stopniowo wypychane z wyników wyszukiwania.

Monitorowanie mediów społecznościowych

Praca z systemami Youscan, IQbuzz, Brand Analytics. Kontrola wzmianek o marce. Identyfikacja kluczowych spostrzeżeń, szybka reakcja na negatywność. Niezbędne narzędzie do monitorowania opinii klientów.

Analityka i badania

Analiza pola informacyjnego, badanie kategorii produktów oraz głównych konkurentów marki. To narzędzie obejmuje zadania od kontroli reputacji i marketingu w czasie rzeczywistym po dogłębne badania.

SERM

Szczegółowa analiza wyników wyszukiwania dla wybranych słów kluczowych. Zbieranie wzmianek o kliencie w sieciach społecznościowych, forach i serwisach informacyjnych. Opracowanie strategii postępowania z negatywnymi informacjami. Klient otrzymuje w pełni kontrolowaną emisję w TOP10.

Historia stworzenia

Język powstał na początku lat 80., kiedy pracownik Bell Labs, Björn Stroustrup, wymyślił szereg ulepszeń języka C, aby dostosować go do własnych potrzeb. Kiedy Stroustrup zaczął pracować w Bell Labs pod koniec lat 70. nad problemami kolejkowania (w odniesieniu do modelowania rozmów telefonicznych), odkrył, że próby wykorzystania istniejących wówczas języków modelowania były nieskuteczne, a użycie wysoce wydajnych języków maszynowych był zbyt trudny dla ich ograniczonej ekspresji. Tak więc język Simula ma takie cechy, które byłyby bardzo przydatne przy tworzeniu dużego oprogramowania, ale jest zbyt wolny, a język BCPL jest wystarczająco szybki, ale zbyt zbliżony do języków niskopoziomowych i nie nadaje się do tworzenia dużego oprogramowania .

Przywołując doświadczenia swojej pracy doktorskiej, Stroustrup postanowił uzupełnić język C (następca BCPL) o możliwości języka Simula. C, jako podstawowy język systemu UNIX, na którym działały komputery Bell, jest szybki, bogaty w funkcje i przenośny. Stroustrup dodał do niego możliwość pracy z klasami i obiektami. W rezultacie praktyczne problemy modelowania okazały się dostępne do rozwiązania zarówno pod względem czasu rozwoju (dzięki zastosowaniu klas typu Simula), jak i czasu obliczeń (dzięki szybkości C). Przede wszystkim dodano klasy w C (z enkapsulacją), dziedziczenie klas, silne sprawdzanie typów, funkcje inline i domyślne argumenty. Wczesne wersje języka, pierwotnie nazywane „C z klasami”, są dostępne od 1980 roku.

Tworząc C z klasami, Stroustrup napisał cfront, tłumacz, który konwertuje kod źródłowy C z klasami na zwykły kod źródłowy C. Umożliwiło to pracę nad nowym językiem i wykorzystanie go w praktyce, wykorzystując istniejącą infrastrukturę UNIX do rozwoju C Nowy język niespodziewanie dla autora zyskał dużą popularność wśród kolegów i wkrótce Stroustrup nie mógł już dłużej go osobiście wspierać, odpowiadając na tysiące pytań.

Tworząc C++, Björn Stroustrup chciał
  • Uzyskaj ogólny język ze statycznymi typami danych, wydajnością i przenośnością języka C.
  • Obsługuje bezpośrednio i kompleksowo wiele stylów programowania, w tym programowanie proceduralne, abstrakcję danych, programowanie obiektowe i programowanie ogólne.
  • Daj programiście swobodę wyboru, nawet jeśli daje mu to możliwość wybrania złego.
  • Zachowaj kompatybilność z C tak bardzo, jak to możliwe, umożliwiając w ten sposób łatwe przejście z programowania w C.
  • Unikaj pomyłek między C i C++: każda konstrukcja dozwolona w obu językach musi oznaczać to samo w każdym z nich i prowadzić do tego samego zachowania programu.
  • Unikaj funkcji, które są zależne od platformy lub nie są ogólne.
  • Nie płać za to, co nie jest używane — żadne narzędzie językowe nie powinno obniżać wydajności programów, które go nie używają.
  • Nie wymagaj zbyt skomplikowanego środowiska programistycznego.

Wybór C jako podstawy do stworzenia nowego języka programowania tłumaczy się tym, że język C:

1.jest językiem uniwersalnym, zwięzłym i stosunkowo niskiego poziomu;
2. nadaje się do większości zadań systemowych;
3. występował wszędzie i na wszystkim;
4. stacje dokujące ze środowiskiem programistycznym UNIX.

- B. Stroustrupa. Język programowania C++. Sekcja 1.6

Pomimo wielu znanych niedociągnięć języka C, Stroustrup zdecydował się użyć go jako podstawy, ponieważ „C ma swoje własne problemy, ale język opracowany od zera miałby je, a znamy problemy z C”. Umożliwiło to również szybkie opracowanie prototypowego kompilatora (cfront), który tłumaczył tylko dodane elementy składni na oryginalny język C.

Wraz z rozwojem C++ włączono inne cechy, które nakładały się na możliwości konstrukcji C, w związku z czym wielokrotnie podnoszona była kwestia rezygnacji z kompatybilności językowej poprzez usunięcie przestarzałych konstrukcji. Jednak kompatybilność została zachowana z następujących powodów:

  • zachowanie obecnego kodu, napisanego oryginalnie w C i bezpośrednio przeniesionego do C++;
  • eliminacja konieczności przekwalifikowania programistów, którzy wcześniej studiowali C (muszą jedynie nauczyć się nowych narzędzi C++);
  • eliminacja pomyłek między językami, gdy są one używane razem („jeśli dwa języki są używane razem, ich różnice powinny być albo minimalne, albo tak duże, aby języków nie można było pomylić”).

Do 1983 roku do języka dodano nowe funkcje, takie jak funkcje wirtualne, przeciążanie funkcji i operatorów, referencje, stałe, kontrola użytkownika nad zarządzaniem wolną pamięcią, ulepszone sprawdzanie typu i nowy styl komentarzy (//). Powstały język przestał być tylko rozszerzoną wersją klasycznego C i został przemianowany z C z klasami na "C++". Jego pierwsze komercyjne wydanie miało miejsce w październiku 1985 roku.

Wynikowa nazwa języka pochodzi od jednoargumentowego postfiksowego operatora inkrementacji C++ (zwiększającego wartość zmiennej o jeden).

Przed oficjalną standaryzacją język został opracowany głównie przez Stroustrup w odpowiedzi na prośby społeczności programistów. Funkcję standardowych opisów językowych pełniły opublikowane prace nad językiem C++ autorstwa Stroustrupa (opis języka, instrukcja obsługi itp.).

Historia standardów

W 1985 roku ukazało się pierwsze wydanie Języka programowania C++, zawierające pierwszy opis języka, co było niezwykle ważne ze względu na brak oficjalnego standardu.


W 1989 roku została wydana wersja C++ 2.0. Jego nowe funkcje obejmowały wielokrotne dziedziczenie, klasy abstrakcyjne, statyczne funkcje składowe, funkcje stałe i chronione składowe. W 1990 roku opublikowano Poradnik z komentarzami C++, który później stał się podstawą standardu. Ostatnie aktualizacje obejmowały szablony, wyjątki, przestrzenie nazw, nowe rzutowania i wartości logiczne.

Biblioteka standardowa C++ również ewoluowała wraz z nią. Pierwszym dodatkiem do standardowej biblioteki C++ były strumienie I/O, które umożliwiają zastąpienie tradycyjnych funkcji C printf i scanf. Ostatnio najbardziej znaczącym rozwojem biblioteki standardowej było włączenie Standardowej Biblioteki Szablonów.

W 1998 roku opublikowano standard językowy ISO/IEC 14882:1998 (znany jako C++ 98), opracowany przez komitet normalizacyjny C++ (grupa robocza ISO/IEC JTC1/SC22/WG21). Standard C++ nie obejmuje konwencji nazewnictwa obiektów, niektórych szczegółów obsługi wyjątków oraz innych funkcji związanych ze szczegółami implementacji, co sprawia, że ​​kod wynikowy generowany przez różne kompilatory jest niekompatybilny. Jednak w tym celu firmy zewnętrzne stworzyły wiele standardów dla określonych architektur i systemów operacyjnych.

W 2005 roku opublikowano Library Technical Report 1 (w skrócie TR1). Chociaż nie jest to oficjalnie część standardu, raport opisuje rozszerzenia standardowej biblioteki, których autorzy spodziewali się uwzględnić w następnej wersji języka C++. Obsługa TR1 jest ulepszana w prawie wszystkich obsługiwanych kompilatorach C++.

Od 2009 roku prowadzone są prace nad aktualizacją poprzedniego standardu, wstępną wersją nowego standardu była najpierw C++09, a rok później C++0x, dziś C++11, która zawierała dodatki do rdzenia języka oraz rozszerzenie biblioteki standardowej, w tym większość TR1.

C++ wciąż ewoluuje, aby sprostać współczesnym wymaganiom. Jedną z grup opracowujących język C++ i wysyłających sugestie dotyczące jego ulepszenia do Komitetu Normalizacyjnego C++ jest Boost, który zajmuje się m.in. ulepszaniem możliwości języka poprzez dodawanie do niego funkcji metaprogramowania.

Nikt nie posiada praw do języka C++, jest bezpłatny. Jednak sam dokument standardu językowego (z wyjątkiem wersji roboczych) nie jest dostępny bezpłatnie.

Tagi: Historia standaryzacji C, ANSI C, ISO C, C99, C11, ISO/IEC C, C.

Początki

C i jest "produktem towarzyszącym" od stworzenia systemu operacyjnego UNIX, który został opracowany w Bell Laboratories przez Kena Thompsona, Denisa Ritchie i spółkę. Thompson własnoręcznie napisał oryginalną wersję systemu UNIX, która działała na DEC PDP-7, jednym z pierwszych minikomputerów z zaledwie 8 tys. słów w pamięci głównej (w końcu był to rok 1969).

Podobnie jak inne systemy operacyjne w tym czasie, UNIX został napisany w języku asemblera. Debugowanie programów asemblerowych jest bolesne i trudne do ulepszenia, a UNIX nie był wyjątkiem. Thompson zdecydował, że do dalszego rozwoju systemu operacyjnego potrzebny jest język wysokiego poziomu i wymyślił mały język B. Thompson przyjął jako podstawę język BCPL, język programowania systemowego opracowany w połowie lat 60-tych. BCPL z kolei wywodzi się z Algol 60, jednego z najwcześniejszych (i najbardziej wpływowych) języków.

Ritchie wkrótce dołączył do projektu UNIX i zaczął pisać w B. W 1970 Bell Labs nabył PDP-11 do projektu. Ponieważ B był gotowy do działania na PDP-11, Thompson przepisał część systemu UNIX w B. W 1971 stało się jasne, że B nie jest całkiem odpowiedni dla PDP-11, więc Ritchie zaczął tworzyć rozszerzoną wersję B. At. najpierw nazwał go NB (New B ), ale kiedy język stał się bardzo różny od B, nazwa została zmieniona na C. W 1973 język był wystarczająco stabilny, aby przepisać w nim UNIX. Przejście na C przyniosło ważną korzyść: przenośność. Pisząc kompilator C dla każdej maszyny w Bell Labs, zespół programistów mógł przenieść na nie system UNIX.

Normalizacja

C nadal ewoluował w latach 70., zwłaszcza od 1977 do 1979, kiedy to pierwsza książka o C. Język programowania C, napisana przez Briana Kernighana i Denisa Ritchie i opublikowana w 1978 roku, stała się biblią programistów C. Wobec braku oficjalnego standardu, ta książka – znana również jako K&R lub Biała Księga, jak lubią ją nazywać fani C – stała się de facto standardem. W latach 70-tych było niewielu programistów C, a większość z nich była użytkownikami UNIX-a. Jednak w latach 80. C wyszedł poza wąskie ramy świata UNIX. Kompilatory C stały się dostępne na różnych komputerach z różnymi systemami operacyjnymi. W szczególności Xi zaczął rozprzestrzeniać się na szybko rozwijającej się platformie IBM PC.

Wraz ze wzrostem popularności pojawiły się problemy. Programiści, którzy napisali nowe kompilatory, wzięli za podstawę język opisany w K&R. Niestety, niektóre cechy języka zostały niejasno opisane w K&R, więc kompilatory często interpretowały je według własnego uznania. Ponadto książka nie zawierała wyraźnego rozróżnienia między cechą języka a cechą systemu operacyjnego UNIX. Sytuację pogarszał fakt, że po publikacji K&R C nadal się rozwijało: dodawane były do ​​niego nowe funkcje i wycinane ze starych. Wkrótce pojawiła się oczywista potrzeba kompleksowego, dokładnego i aktualnego opisu języka. Bez takiego standardu zaczęły pojawiać się dialekty języka, które przeszkadzały w przenoszeniu – najsilniejszej stronie języka.

Rozwój amerykańskiego standardu C rozpoczął się w 1983 roku pod auspicjami American National Standards Institute (ANSI). Po wielu ulepszeniach, standard został ukończony w 1988 roku i formalnie przyjęty w grudniu 1989 roku jako standard ANSI X3.159-1989. W 1990 roku został zatwierdzony przez Międzynarodową Organizację Normalizacyjną (ISO) jako międzynarodowa norma ISO/IEC 9899:1990. Ta wersja języka jest zwykle nazywana C89 lub C90, aby nie mylić z oryginalną wersją C, która zwykle nazywa się K&R C.

Język uległ niewielkim zmianom w 1995 r. (zmiany są opisane w dokumencie zwanym potocznie poprawką 1). Bardziej znaczące zmiany nastąpiły w 1999 roku, kiedy opublikowano ISO/IEC 9899:1999. Język opisany w tym standardzie jest powszechnie określany jako C99. Terminy „ANSI C”, „ANSI / ISO C” i „ISO C”, używane kiedyś do opisania C99 ze względu na istnienie dwóch standardów, są niejednoznaczne.

W 2011 roku wraz z edycją C++ został wydany standard C11. Pomimo istnienia 11-letniego standardu, wiele kompilatorów nadal nie obsługuje w pełni nawet wersji C99, więc użycie standardu C11 zostanie wyraźnie określone.