• Nie Znaleziono Wyników

W3 – Tworzenie programu, IDE

N/A
N/A
Protected

Academic year: 2021

Share "W3 – Tworzenie programu, IDE"

Copied!
24
0
0

Pełen tekst

(1)

Podstawy

programowania I

Wykład nr 3

Wprowadzenie do programowania w C++. Mechanika tworzenia programu. Pierwszy program

autor: dr inż. Michał Łabowski

▪ michal.labowski@wat.edu.pl

▪ www.mlabowski.wel.wat.edu.pl

(2)

Podstawowe definicje Programowanie (informatyka) – działanie polegające na konstruowaniu programów w języku programowania.

Program (informatyka) – przepis jednoznacznie określający ciąg czynności, które mają być wykonane przez komputer.

Język programowania (informatyka) – narzędzie służące do formułowania programów dla komputerów, którego składnia określa zasady zapisu programów, a semantyka przypisuje programom ich interpretację (określa efekty działania programu).

Popularne języki programowania:

• C++

• C#

• C

• Python

• Java

(3)

Podstawowe definicje Mechanizm wykonywania kodu

programu

Interpretacja Kompilacja Interpreter (informatyka):

• program wykonujący program zapisany w pewnym języku programowania w ten sposób, że tekst programu jest czytany i natychmiast wykonywany.

• interpreter jest zwykle wolniejszy od kompilatora, ale pozwala łatwo zatrzymać wykonanie programu w dowolnym miejscu, sprawdzić jego stan, stwierdzić błąd w czasie wykonywania, zmienić wykonywany program itp.

• często wykorzystywany przy uruchamianiu nowych programów oraz przy wykonywaniu instrukcji wprowadzanych przez użytkownika bezpośrednio z klawiatury.

• ułatwia przenośność programów pomiędzy systemami operacyjnymi Interpretowalne (skryptowe) języki programowania:

• Python, R, JavaScript, Ruby, PHP

• Programy nazywamy skryptami

(4)

Podstawowe definicje Interpreter (na przykładzie języka Python)

Plik

źródłowy • m.py Kod

bajtowy • m.pyc

PVM • Wykonywanie

1. Tworzymy pliki źródłowe z kodem źródłowym w dowolnym edytorze tekstu 2. Kod źródłowy jest tłumaczony do kodu bajtowego. Kod bajtowy to

niskopoziomowa, niezależna od platformy reprezentacja kodu źródłowego.

(5)

Podstawowe definicje Kompilator (na przykładzie języka C++)

Kod źródłowy

Kompilator

Kod pośredni

Konsolidator (linker)

Kod wykonywalny Kod

uruchomieniowy Kod biblioteczny

2 1

3

Mechanika tworzenia programu:

1. tworzenie kodu źródłowego

2. kompilacja Dwuetapowy proces tworzenia kodu wykonywalnego

(6)

Tworzenie kodu źródłowego w C++

Tworzenie kodu źródłowego:

• odbywa się w dowolnym edytorze tekstu, choć zalecane jest korzystanie z IDE (autouzupełnianie, wsparcie refaktoryzacji, kolorowanie składni)

• kod źródłowy zapisujemy w plikach z rozszerzeniem (przyrostkiem) .cpp (można spotkać także .cc, .c++, .cxx)

• nazwa pliku powinna spełniać wymagania systemu operacyjnego, najczęściej nie powinna zawierać znaków specjalnych (znaków diakrytycznych i spacji). W systemie Linux wielkość liter ma znaczenie

Składniki nazwy pliku z kodem źródłowym:

plik.cpp

Nazwa bazowa Kropka Rozszerzenie

(7)

Kompilacja i konsolidacja Kompilacja:

• Przetworzenie kodu źródłowego zapisanego w plikach źródłowych na kod pośredni (kod maszynowy) zapisany w plikach obiektowych (ang. object files)

• Pliki obiektowe zawierają kod maszynowy wynikający z kodu źródłowego napisanego przez programistę

• Kod maszynowy po etapie kompilacji nie jest gotowy do uruchomienia

• Przed rozpoczęciem zasadniczej kompilacji kodu kompilator uruchamia preprocesor, który wykonuje czynności przygotowawcze (ang. preprocessing).

• Kompilator dostarcza informacji o ewentualnych błędach w kodzie źródłowym Preprocesor

• Jest programem uruchamianym przez kompilator

• Jest uruchamiany automatycznie podczas kompilacji programu

• Z jego wywołaniem związane są dyrektywy preprocesora umieszczane w kodzie źródłowym

• Dyrektywy preprocesora rozpoczynają się od znaku # (ang. hash)

• Przykładowa dyrektywa: #include <iostream> umieszczona w kodzie źródłowym jest zastępowana przez preprocesor kodem zawartym w pliku iostream.

• Przegląda kod źródłowy w poszukiwaniu zrozumiałych dla siebie dyrektyw i

wykonuje związane z nimi operacje (np. rozwijanie makr)

(8)

Kompilacja i konsolidacja Konsolidacja (linkowanie):

• łączy (linkuje) skompilowany kod pośredni z kodem startowym (ang. start-up code) i kodem bibliotecznym

• Wynikiem jego działania jest kod wykonywalny

• Kod startowy jest interfejsem pomiędzy programem działającym w przestrzeni użytkownika a systemem operacyjnym

• Każdy z systemów operacyjnych wymaga innego kodu źródłowego

• Kod biblioteczny to kod wykorzystywanych bibliotek zewnętrznych, np. bibioteki iostream (obsługa strumieni wejścia/wyjścia).

• Linker pobiera z bibliotek jedynie te fragmenty kodu, które są wymagane przez

funkcje użyte w programie (kodzie źródłowym)

(9)

Kompilacja i konsolidacja Kompilacja i konsolidacja w systemie Linux

• Najpowszechniej wykorzystywanym kompilatorem jest g++ (GNU C++), inne

Aby skompilować kod składający się z wielu plików źródłowych można podać potrzebne pliki w wierszu poleceń:

g++ plik_1.cpp plik_2.cpp

W efekcie powstaje plik wykonywalny o domyślnej nazwie a.out oraz dwa pliki obiektowe plik_1.o i plik_2.o.

Jeśli zmodyfikujemy jeden z plików źródłowych, np. plik_1.cpp możemy ponownie skompilować ten plik i połączyć go ze skompilowanym wcześniej plikiem obiektowym plik_2.o:

g++ plik_1.cpp plik_2.o

(10)

Cykl życia oprogramowania Cykl życia oprogramowania:

1. Planowanie 2. Analiza

3. Projektowanie 4. Implementacja 5. Testowanie 6. Wdrożenie

7. Konserwacja (utrzymywanie oprogramowania, pielęgnacja) 8. Wyłączenie

Pisząc kod programista powinien mieć na uwadze, że znacznie więcej czasu poświęca się na CZYTANIE kodu niż jego pisanie. Kod należy zatem pisać tak, żeby przyjemnie go się czytało (był logiczny, zapisany zgodnie ze standardami tworzenia oprogramowania).

Fazy procesu tworzenia oprogramowania

Metodologie tworzenia oprogramowania:

(11)

Architektura oprogramowania Architektura oprogramowania:

• Określa organizację systemu, relacje komponentów

• Najpowszechniejszym językiem opisu architektury jest UML (ang. Unified Modeling Language)

• Powszechnie wykorzystywane są zasady SOLID – zbiór dobrych praktyk

programowania obiektowego

(12)

Język C++

Język C++:

• Powstał na początku lat 80. W zakładach Bell Labs, opracował go Bjarne Stroustrup

• Został stworzony na podstawie języka C, C++ jest nadzbiorem języka C.

• Język C był językiem wysokiego poziomu, umożliwiającym łatwe odwołania do sprzętu i programowanie systemowe

• Poprawne programy napisane w języku C są poprawnymi programami w C++

• Programy C++ mogą wykorzystywać biblioteki napisane w języku C

• Nazwa C++ pochodzi od istniejącego w C operatora inkrementacji ++ (C++ to rozszerzony, ulepszony C)

• Język obiektowy

• W programowaniu obiektowym najważniejsze są dane, nie algorytmy – zamiast dopasować problem do języka, w programowaniu obiektowym próbuje się dopasować język do problemu – realizowane jest to przez tworzenie własnych typów danych, czyli klas)

• Klasa to opis nowej postaci danych, obiekt to konkretna struktura danych

(13)

Język C++

Podstawowe cechy programów obiektowych:

• Enkapsulacja (ang. encapsulation): ukrywanie informacji, wewnętrznych algorytmów przed nieuprawnionym dostępem

• Polimorfizm: pozwala tworzyć wiele definicji tych samych operatorów i funkcji, tak że, kontekst programu decyduje, która definicja zostanie użyta

• Dziedziczenie: pozwala wywodzić nowe klasy z klas istniejących wcześniej (rozszerzenie funkcjonalności), co pozwala na powtórne wykorzystanie kodu.

Standardy języka C++:

• Definiowany przez organizację ANSI (ang. American National Standarization Institute - ANSI), IEC (ang. International Electrotechnical Commision - IEC) i ISO.

• Co kilka lat wydawany jest nowy standard definiujący/wprowadzający nowe funkcjonalności

• C++98/C++03 – pierwsze standardy C++

• C++11 (ISO/IEC 14882:2011) – znaczące rozwinięcie języka

• C++17

• C++20

• Kompilatory nie zawsze wspierają najnowsze standardy

(14)

Zintegrowane środowiska programistyczne Zintegrowane środowisko programistyczne

• ang. Integrated Development Environment – IDE

• program lub grupa programów służących do tworzenia oprogramowania:

• zawiera edytor tekstu - pisanie kodu

• uruchamia kompilator i linker

• uruchamia debugger (ang. Debugging - odpluskwianie) – proces polegający na sekwencyjnym wykonywaniu programu z możliwością podglądania wartości zmiennych. Popularnym debuggerem jest GDB (GNU Project Debugger)

• pozwala na uruchomienie programu

• IDE to tzw. toolchain

Uruchomienie Debugging

(15)

Zintegrowane środowiska programistyczne Popularne IDE C++

• Microsof Visual Studio Code

• Eclipse

• QtCreator

• Code::Blocks Wybrane zalety IDE

• ułatwia pisanie kodu (kolorowanie składni)

• podpowiedzi (uzupełnianie składni)

• formatowanie kodu

• statyczna analiza kodu

(16)

Struktura projektu Pliki projektu w C++

pliki źródłowe pliki nagłówkowe

• rozszerzenia: .cpp, .c

• zawierają definicje funkcji, klas • rozszerzenia: .hpp, .h

• zawierają deklaracje funkcji, klas

• nazwa pliku nie może zawierać białych znaków (spacji, tabulatorów)

• nazwa pliku nie może zawierać znaków specjalnych (np. polskich znaków)

• nazwa pliku nie może rozpoczynać się od cyfry

• pliki mogą być grupowane w foldery

(17)

Przykładowy program

Przykładowy program „Hello world” napisany w języku C++ w

Wynik uruchomienia programu

(18)

Przykładowy program - komentarze

Nr linii Opis

1 – 4, 7

Komentarz wielolinijkowy (linie 1-4) i jednolinijkowy (linia 7). Komentarz to notatka zostawiona przez programistę czytelnikowi, objaśniająca działanie programu. Komentarz to linia lub linie tekstu w kodzie programu, które nie są tłumaczone na kod wynikowy (są pomijane przez kompilator). Używanie komentarzy do opisu kodu jest dobrą praktyką programistyczną. Komentarze są

(19)

Przykładowy program

Nr linii Opis

6

Dyrektywa preprocesora (zawsze zaczynają się znakiem „#”), mówiąca: „dołącz w tym miejscu kod zawarty w bibliotece iostream, tzw. plik nagłówkowy z deklaracjami funkcji bibliotecznych”. Preprocesor wykonuje tę operację przed kompilacją kodu. Nawiasy <…> oznaczają, że plik będzie wyszukiwany w katalogach o ścieżkach zdefiniowanych w kompilatorze lub w opcjach projektu.

Gdy dołączamy stworzony przez nas plik nagłówkowy wykorzystujemy znak cudzysłowu ”…” – wtedy przeszukiwany będzie w pierwszej kolejności folder z naszym projektem, później standardowe ścieżki.

(20)

Przykładowy program

Nr linii Opis

6

Dyrektywa using mówiąca: „użyj przestrzeni nazw standard”. Przestrzeń ta dotyczy obiektów zawartych w pliku nagłówkowym iostream. Od tej pory można do nich odnosić się bez przedrostka z nazwą przestrzeni, tzn. gdyby pominąć dyrektywę using… linia 12 wyglądałaby następująco: std::cout << „Hello world! <<

std::endl.

(21)

Przykładowy program

Nr linii Opis

10

Nagłówek funkcji main. Funkcja ta musi pojawić się w każdym programie.

Składnia: typ_zwracany nazwa_funkcji (lista_argumentów). Typ_zwracany to nazwa typu argumentu zwracanego przez funkcję za pomocą słowa kluczowego return. Nazwa_funkcji - nazwy obiektów w C++ nie mogą zawierać znaków specjalnych (np. polskich znaków, spacji), nie mogą zaczynać się od cyfry.

Lista_argumentów – w tym przypadku funkcja nie przyjmuje żadnych argumentów. W C++ funkcje są wywoływane przez inne funkcje, a nagłówek stanowi interfejs funkcji wywoływanej na rzec funkcji wywołującej.

Typ zwracany

Nazwa funkcji

Lista argumentów

Nagłówek funkcji

(22)

Przykładowy program

Nr linii Opis

11 - 14

Ciało funkcji, czyli zestaw instrukcji wykonywanych w momencie wywołania funkcji (linie 7, 8), ograniczony klamrami. Instrukcje kończą się średnikiem.

12

Obiekt cout z biblioteki iostream, służący m.in. do wyświetlenia strumienia wyjściowego z programu (tutaj jest nim ciąg znaków Hello wordl!) na ekranie.

Nagłówek funkcji Ciało funkcji

Definicja funkcji

(23)

Przykładowy program

Nr linii Opis

13

Dyrektywa return powoduje zakończenie wykonywania funkcji (tzn., że jest ostatnia instrukcją wykonaną w funkcji), przekazuje argument zwracany (tutaj zero) na zewnątrz (czyli do obiektu wywołującego funkcję i czekającego na rezultat jej działania)

Nagłówek funkcji Ciało funkcji

Definicja funkcji

(24)

Literatura:

[1] Grębosz J., Opus Magnum C++, Helion, Gliwice, 2018

[2] Prata S., Język C++ Szkoła programowania, Helion, Gliwice, 2013

[3] Prata S., Język C Szkoła programowania, Helion, Gliwice, 2012

Cytaty

Powiązane dokumenty

weryfikacja wykazuje, że w znacznym stopniu poprawnie lecz niekonsystentnie Potrafi skonstruować model zjawiska weryfikacja wykazuje, że bez uchwytnych niedociągnięć

3 – do jednego ze zbiorów danych trzeba było dopasować funkcję

W definicji metody, this jest parametrem domy lnym, który zawiera referencj do obiektu, który otrzymuje odwo anie danej metody.. Na przyk ad, je eli pragnie si wywo a funkcj ,

użytkownika i wciśnięcie przycisku Anuluj. Czy to wystarczy, by komputer wykonał to, co mu każemy? Otóż nie bardzo… Chociaż wprowadziliśmy już nieco porządku, nadal

Zauważmy, że każdy zbiór warstwicowy funkcji quasi-monotonicznej jest.. Jest to na ogół problem trudny. W prostych przypadkach wykorzy- stać można analizę zbiorów

• Program: głównie język maszynowy 1949 (prawie) pierwszy assembler (EDSAC). 1952 Grace Hopper, pierwszy kompilator A-0 (UNIVAC I) 1954

Teraz, gdy już to przeczytaliście, zajmijcie się zadaniem 4. Zdania, które utworzycie powinny odnosić się do ilustracji w zadaniu 4. Jeśli ktoś je zrobi, niech mi je prześle

Po przeprowadzonej ocenie formalnej oraz merytorycznej do ko Ĕca marca 2011 roku zatwierdzono do realizacji 23 239 projektów (o warto Ğci dofinansowania ogóáem 56,8 mld PLN),