Programowanie obiektowe

Download Report

Transcript Programowanie obiektowe

Podstawy informatyki

Algorytm – (Wikipedia)

Algorytm skończony, uporządkowany ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego zadania.

Cechy algorytmu:   Jednoznaczność (potrzebne dane, czynności i ich kolejność, oczekiwany wynik) Możliwość zastosowania do wielu podobnych zadań (klasa zadań rozwiązywanych za pomocą algorytmu)

Przykład – książka w bibliotece

Problem chcemy odszukać książkę znając autora i tytuł.

Algorytm:        Weź książkę (pierwszą z lewej z najwyższej półki) Sprawdź, czy jest to szukana książka.

Jeśli tak – książka znaleziona, koniec algorytmu.

Czy pozostały jeszcze niesprawdzone książki?

Jeśli nie – książki nie ma w tej bibliotece, koniec algorytmu.

Weź następną książkę (kolejna z prawej a gdy już nie ma pierwsza z lewej z niższej półki).

Przejdź do punktu 2.

Poprawność, wykonalność

Poprawny algorytm – dla określonej klasy danych zawsze otrzymujemy wynik zgodny z oczekiwaniami np. największą z możliwych wartość wskaźnika podczas optymalizacji.

Wykonalny algorytm dla określonej klasy danych algorytm zawsze się kończy (własność stopu). Algorytm musi być wykonalny aby mógł być poprawny.

Złożoność obliczeniowa

  Złożoność czasowa – czas najczęściej zależy od wymiarowości zadania. O czasie wykonania obliczeń decyduje niewielka część najczęściej wykonywanych operacji. Typowe zależności: Czas stały niezależny od wymiarowości  Liniowa (n)   Logarytmiczna (log 2 n) Liniowo-logarytmiczna (n * log 2 n)   Kwadratowa (n 2 ) Złożoność pamięciowa – często istnieje wymienność, szybsze obliczenia kosztem większego zapotrzebowania na pamięć Przykład – szukanie książki (w zbiorze n książek)   Złożoność pesymistyczna Złożoność średnia – n sprawdzeń – n/2 sprawdzeń

Katalog uporządkowany

  Dla katalogu nieuporządkowanego nie znamy lepszego algorytmu wyszukiwania niż „pełny przegląd” (n) Dla katalogu uporządkowanego istnieje szybszy algorytm – „wyszukiwanie binarne” ((log 2 n)

Język programowania

Przeznaczenie: definiowanie algorytmów.

Wymagane cechy:   Jednoznaczność Przejrzystość  Zwarty zapis  Precyzja.

 Czytelność Język programowania służy do:  Komunikowania się programisty z komputerem   Komunikowania się programisty z innymi programistami Komunikowania się programisty z samym sobą.

Podstawowe elementy

   

Komentarze

– uwagi pomagające zrozumieć opis algorytmu

Deklaracje

– używane biblioteki, przestrzeń nazw, opcje,…

Zmienne

– nazwa, typ (int, float, text)

Stałe

– dane używane w obliczeniach 

Struktury kontrolne

(if, for, while,..) 

Procedury, funkcje, klasy

Zmienne i stałe

     Stała – pewna wartość używana podczas obliczeń np. 0.22 , ”abc” Zmienna – nazwana wielkość używana w obliczeniach, która może w trakcie obliczeń przyjmować różne wartości.

Do przechowywania zmiennych rezerwuje się potrzebną ilość pamięci Podstawienie wartości na zmienną x=50 lub x=x+y Zmienne wykorzystujemy w wyrażeniach arytmetycznych i logicznych np.: if (x <100 && x>40) x=x+30;

Struktury kontrolne

  Zmieniają kolejność wykonywania komend języka if ( x > 100 ) { x1 = x } else { x1 = x+x1 }     for (i = 0; i < 10; i++) { a[i] = a[i+1];} do {i++;} while (i < 10); switch (s) { case ”a”: x=”b”; break; … goto et100;

Procedury i funkcje

 Przeznaczenie: wygodne wydzielenie powtarzalnego fragmentu kodu np.: int xy(int x, int y) { … powtarzany fragment kodu  }    int – typ zwracanego wyniku xy – nazwa funkcji x – przekazywany parametr y – przekazywany parametr

Rekurencja

   Wywoływanie funkcji przez siebie Przydatny sposób do realizacji algorytmów dotyczących struktur wykazujących podobieństwo na różnych poziomach np. struktur hierarchicznych Realizacja z wykorzystaniem stosu – możliwe przepełnienie stosu

Klasy

  Wspólna definicja obiektów opisywanych tym samym zestawem atrybutów i funkcji Dziedziczenie – definiowanie nowej klasy na podstawie już zrealizowanej

Wyrażenia arytmetyczne i logiczne

 W językach programowania można używać swobodnie złożonych wyrażeń arytmetycznych i logicznych

Semantyka i syntaktyka

    W językach programowania ściśle określa się syntaktykę (gramatykę) – dopuszczalną budowę zdań języka (kolejność elementów, relacje między nimi,…) semantykę – znaczenie poszczególnych elementów języka (co spowoduje użycie pewnej konstrukcji językowej) Notacja BNF (Backus-Naur form) (bezkontekstowe) – ścisłe definiowanie gramatyki języków programowania Przykład: ::= ::= ::= 0 | 1

Języki proceduralne

  Biblioteki procedur podzielone na grupy funkcjonalne Wszystkie dane potrzebne do wykonania przekazywane jako parametry podczas wywołania procedury (funkcji)

Języki obiektowe

    Definiujemy klasę obiektów podając listę atrybutów określających obiekt oraz listę funkcji, za pomocą których można wpływać na działanie obiektu.

Tworzymy egzemplarze obiektów (słowo kluczowe new ) np. przyciski w okienku.

Do atrybutów można odwoływać się poprzez nazwę obiektu i nawę atrybutu np. nazwa.atrybut

Funkcje obiektu można uruchomić podając nazwę obiektu i nazwę funkcji np.

nazwa.funkcja()

Języki programowania

 Assembler  Fortran  Algol  Cobol  PL-1  C  Simula, Smalltalk  C++  Java, C#  Prolog  Lisp  Perl, PHP  JavaScript

Assembler i macro-assembler

 Język programowania niskiego poziomu     Asembler operuje na rejestrach procesora i komórkach pamięci Komendy odpowiadają rozkazom procesora Różne zestawy komend dla różnych modeli komputerów – brak przenośności oprogramowania pisanego w assemblerze Macro-assembler – możliwość definiowania szablonów, krótszy i bardziej czytelny kod ale trudności podczas testowania.

Rejestry procesora x86

         AX – akumulator DX – rozszerzenie akumulatora do mnożenia i dzielenia CX – licznik iteracji BX – główny rejestr adresowy SP – wskaźnik stosu BP – wskaźnik ramki SI, DI – pomocnicze rejestry adresowe IP – licznik instrukcji FLAGS – rejestr wskaźników

Typowe rozkazy procesora

           kopiowanie danych z pamięci do rejestru kopiowanie danych rejestru do pamięci zapamiętywanie danych na stosie pobieranie danych za stosu dodawanie zawartości rejestrów odejmowanie zawartości rejestrów dodawanie i odejmowanie jedności zmiana znaku liczby działania na bitach iloczyn logiczny, suma logiczna, suma modulo 2 (różnica symetryczna), negacja, przesunięcie bitów w lewo lub prawo skoki bezwarunkowe skoki warunkowe

Przykładowy program w assemblerze start: mov ah, 9 mov dx, info int 21h Info mov ah, 0 int 16h mov ax, 4C00h int 21h db „Hello world$"

FORTRAN – formula translator

    zespół Johna Backusa 1954-57, IBM Uniwersalny język do obliczeń inżynierskich Programowanie z użyciem kart perforowanych Wyrażenia arytmetyczne, tablice, funkcje

Algol – algorithmic language

  John Backus, Peter Naur – specyfikacja przy współpracy międzynarodowej (Algol 60) Uniwersalny język algorytmiczny oparty na ściśle zdefiniowanej gramatyce (notacja BNF)  Instrukcje blokowe (begin end)    Tablice dynamiczne (rozmiar definiowane w trakcji obliczeń a nie podczas translacji) Rekurencja – wywoływanie procedur przez siebie Przekazywanie parametrów do procedur przez wartość

COBOL

Common Business Oriented Language    Język przetwarzania danych biznesowych Bardzo czytelny zapis – niepotrzebna dodatkowa dokumentacja Rozbudowana składnia    Tylko zmienne globalne Brak dynamicznej alokacji pamięci, rekurencji Proste programowanie ale dużo pisania

PL-1 Programming Language One

   Opracowany w IBM na początku lat 60-tych „Wszystkomający” uniwersalny język programowania dla celów naukowych, inżynierskich i biznesowych Wiele typów danych  Struktury danych  Rozbudowane operacje we-wy dla wielu urządzeń  Obszerna dokumentacja

Język C

   Opracowany dla własnych potrzeb do realizacji jądra systemu operacyjnego Unix 1969-73 w Laboratoriach Bell’a W 1978 Brian Kernighan i Dennis Ritchie opublikowali jego dokumentację Zwarty zapis np. { } zamiast begin end, i++ zamiast i = i + 1   Standardowa biblioteka funkcji (funkcje matematyczne, operacje we wy, współpraca z systemem operacyjnym) Użycie zmiennych wskaźnikowych

Simula

 Rozszerzenie Algolu  Opracowany w 1967 w Oslo jako uniwersalny język dla potrzeb symulacji  Wprowadzono koncepcje klasy i obiektu  Obiekty należące do tej samej klasy są opisywane przez te same parametry i funkcje  Obiekty mogą być tworzone i usuwane

Smalltalk

 Powstał w latach 70-tych w firmie Xerox  Pierwszy czysto obiektowy język programowania  Wszystkie dane (nawet stałe) są obiektami  Koncepcja maszyny wirtualnej – implementacja na różnych platformach  Garbage collection – odzyskiwanie nieużywanej pamięci  Zgrabny język o dużych możliwościach definiowania nowych funkcjonalności

C++

     Powstał w latach 80-tych, Bjarne Stroustrup Rozszerzenie obiektowe języka C Klasy, dziedziczenie Konstruktory i destruktory – metody wywoływane podczas tworzenia i usuwania obiektów Bezpośrednie zarządzanie dostępną pamięcią. Operatory new i delete do alokacji pamięci dla danych, struktur i klas   Przestrzenie nazw … Bogaty ale dość złożony język, którym łatwo można zrobić wszystko włącznie z błędami.

Java

        Opracowany w Sun Microsystems w latach 1991-94, James Gosling Podstawowe koncepcje przejęte z języka Smalltalk, składnia wzorowana na C++ ale starano się usunąć te elementy, które były przyczyną błędów programistycznych w C++ Kompilowany do kodu bajtowego – implementacja na wielu platformach Garbage collection Dziedziczenie tylko od jednej klasy Bogate biblioteki klas Nacisk na zastosowania sieciowe i programowanie rozproszone Uruchamianie programów – NetBeans, JBuilder

C# - C Sharp

        Odpowiedź Microsoftu na język Java Powstał w 2000 w zespole kierowanym przez Andersa Hejlsberga Kod kompilowany do języka CIL, wymaga środowiska uruchomieniowego .NET lub Mono DotGNU Garbage collection Dziedziczenie tylko z jednej klasy Możliwość dynamicznego tworzenia kodu w trakcie działania programu Bogate biblioteki klas .NET firmy Microsoft Silne wsparcie przy uruchamianiu programów w Visual Studio