Historia i podstawowe koncepcje

Transkrypt

Historia i podstawowe koncepcje
Historia i podstawowe
koncepcje
Tomasz Borzyszkowski
Język C
W latach 1960-70 trwają intensywne prace nad pierwszymi językami
programowania zapewniającymi:
 Łatwość użycia  Efektywność kodu  Łatwość rozszerzania
Pierwszymi językami były: BASIC, COBOL i FORTRAN. Jednak ich
konstrukcje przewidziane w ww. językach nie sprzyjały pisaniu
programów efektywnych i łatwych w rozumieniu.
Lata 1960. Martin Richards stworzył język BCPL; podstawy
programowania strukturalnego
Koniec 1960. Ken Thompson opierając się na BCPL zdefiniował
język B
1969. Dennis Ritchie opierając się na języku B zdefiniował język C
zaimplementowany przez Dennisa Ritchie na komputerze DEC
PDP-11 działającym pod systemem UNIX
2
Język C cd
Przez lata standard języka C był wyznaczany przez implementacje
systemu UNIX - opisany przez B. Kernighana i D. Ritchie The C
Programming Language.
W 1989 ANSI (American National Standards Institute) opracował
standard języka C.
Język C swą popularność zawdzięcza temu, że został zaprojektowany,
zaimplementowany i rozwijany przez programistów (w większości
wywodzących się z systemu UNIX).
Był pierwszym językiem łączącym w sobie cechy, rzadko osiągane we
wcześniejszych językach, tj:
 Strukturalny kod
 Niezależność od sprzętu
 Łatwość przyswajania
3
Język C++
W latach 1970. i 1980. C stał się dominującym językiem programowania.
Skąd więc potrzeba nowego języka programowania?
Rosnąca złożoność programów.
Tym razem zaczęto szukać lepszej metodologii radzenia sobie z bardzo
złożonymi programami, a nie nowego języka. Wynikiem tych
poszukiwań była nowa metodologia programowania:
Programowanie zorientowane obiektowo (OOP)
C++ został wymyślony przez Bjarne Stroustrup w 1979 roku w Bell
Laboratory w Murray Hill, New Jersey. Początkowo C++ nazywał się C
with Classes. W 1983 zmieniono nazwę na C++.
Sukces C++ bazował na sukcesie języka C, podobnie jak składnia
języka bazowego.
W 1997 powstał standard ANSI/ISO języka C++.
4
Powstanie języka Java
Powody powstania języka Java:
 Stworzenie języka niezależnego od platformy sprzętowej
nadającego się także do zastosowań niekomputerowych np.:
mikrofalówki, telefony komórkowe, ...
 Internet: potrzeba jednolitego i bezpiecznego języka do
oprogramowania aplikacji przesyłanych siecią
W 1991 roku w Sun Microsystem, Inc. po 18 miesiącach James
Gosling, Patrick Naughton, Chris Warth, Ed Frank i Mike Sheridan
stworzyli pierwszą wersję języka nazwanego wtedy Oak.
Wiosną 1995 roku oficjalnie ogłoszono powstanie języka
nazwanego Java
Java bazuje na składni języków C i C++ oraz na obiektowych
koncepcjach C++, jednak nie jest w żaden sposób z nimi zgodna.
5
Java: właściwości języka
Aplety i aplikacje
W Javie można tworzyć dwa rodzaje programów: aplikacje i aplety.
Aplikacje to programy, które są uruchamiane na komputerze pod
kontrolą zainstalowanego systemu operacyjnego.
Aplet jest aplikacją zaprojektowaną i stworzoną do przesyłania przez
sieć Internet i wykonywania przez przeglądarki sieciowe.
Bezpieczeństwo
Uruchamianie zwykłych programów pochodzących z internetu wymaga
znacznej ostrożności. Aplety języka Java są bezpieczne. W czasie ich
uruchamiania zostaje im przydzielony kawałek pamięci komputera.
Poza nim aplet nie może korzystać z innych zasobów - czasem
środowisko tego typu nazywa się sandbox.
Niezależność od platformy
Do internetu podłączone są różne typy komputerów i nie tylko. Aplety
Javy są uniwersalnymi programami, uruchamialnymi na każdej
platformie.
6
Bytecode
Rozwiązanie problemu bezpieczeństwa i niezależności od platformy
sprzętowej tkwi w tym, że w wyniku kompilacji programu nie
otrzymujemy kodu wykonywalnego lecz kod zwany bytecode.
Bytecode jest wysoko zoptymalizowanym zbiorem instrukcji
zaprojektowanym do wykonania przez system wykonawczy Javy,
zwany Java Virtual Machine (JVM). JVM jest interpreterem bytecodu.
Języki poprzedzające Javę (C i C++) były językami w pełni
kompilowanymi, tj. kompilacja polegała na wyprodukowaniu kodu
wykonywalnego na danej platformie sprzętowej. Co więcej, dla każdej
platformy sprzętowej trzeba było wyprodukować kompilator.
W przypadku języka Java sytuacja jest prostsza. Wystarczy
zaimplementować na każdej platformie znacznie prostszą JVM i
uruchamiać pod jej kontrolą uniwersalny bytecode.
7
OOP koncepcje
Java jest tak silnie związana z OOP, że nie ma możliwości napisania
nieobiektowego programu (jak to ma miejsce w C++). Dlatego musimy
poznać podstawowe koncepcje OOP zanim przystąpimy do pisania
kodu.
Dwie koncepcje programowania:
 Model procesowy: program jest serią akcji, tj. kodem,
wykonywanych na danych; model ten jest wykorzystywany w
językach proceduralnych: C, Pascal,...; model jest tym trudniejszy
do stosowania im program jest większy i bardziej złożony
 Model OOP: program jest zorganizowany wokół danych, tj.
obiektów, a nie akcji, i zbioru dobrze zdefiniowanych interfejsów do
danych; często OOP określa się jako: dane kontrolujące dostęp do
kodu
8
OOP abstrakcja
Ludzie często używają abstrakcji w życiu radząc sobie w ten sposób
ze skomplikowanymi zjawiskami/obiektami. Np.: ludzie nie myślą o
samochodzie jako o zbiorowisku dziesiątek tysięcy części, a raczej jak
o dobrze zdefiniowanym obiekcie o unikalnym zachowaniu.
Do zarządzania abstrakcją służą klasyfikacje hierarchiczne,
pomagające rozbić złożone problemy na prostsze.
Obiekty abstrakcyjne często w rzeczywistości składają się z wielu
komponentów. Np.: obiekt samochód składa się z wielu komponentów
(układ kierowniczy, hamulce, silnik, ...) lecz z zewnątrz jest postrzegany
jako całość.
Obiekty komponenty mogą porozumiewać się ze sobą przesyłając do
siebie komunikaty. Komunikaty te mogą być ukryte przed
obserwatorem zewnętrznym - też obiektem.
9
OOP hermetyzacja
Hermetyzacja jest mechanizmem łączącym kod i dane, na których kod
operuje, i chroni je przed niepowołanym dostępem i niewłaściwym
użyciem.
Hermetyzacja często jest opisywana jako opakowanie ochronne dla
kodu i danych chroniące je przed dostępem przez kod pochodzący z
zewnątrz opakowania. Dostęp do danych i kodu wewnątrz opakowania
jest kontrolowany przez zdefiniowany interfejs.
Klasa jest definicją struktury (danych) i zachowania (kodu), które mogą
być wspólne dla wielu obiektów. Każdy obiekt będący instancją danej
klasy posiada struktury i zachowania zdefiniowane w klasie, choć
poszczególne obiekty mogą się różnić strukturami i zachowaniami
spoza klasy.
Dane obiektów danej klasy nazywamy zmiennymi instancji,
natomiast kod nazywamy metodami instancji lub krótko metodami.
10
OOP klasy
Klasa
Obiekt
Metody prywatne
Prywatne zmienne
instancyjne
Metody publiczne
Publiczne zmienne
instancyjne
(niezalecane)
11
OOP dziedziczenie
Dziedziczenie jest mechanizmem nabywania przez jeden obiekt
własności innego obiektu.
Dziedziczenie, podobnie jak abstrakcja wspiera koncepcję
klasyfikacji hierarchicznej.
Przykład:
Zwierze
Ssak
Koń
Ryba
Delfin
Rekin
Płotka
12
OOP polimorfizm
Polimorfizm (z greckiego: wiele form) jest własnością pozwalającą
użyć jeden interfejs dla pewnej klasy akcji. Poszczególne akcje są
determinowane przez sytuację (środowisko czasu wykonywania).
Przykład: Rozważmy program, w którym potrzebujemy trzech
rodzajów stosów: liczb całkowitych, liczb zmiennopozycyjnych i
znaków. Algorytm implementujący każdy stos jest taki sam (push,
pop, ...), natomiast różni się danymi, na których operuje. W
zwykłych językach programowania zwykle tworzymy trzy różne
implementacje stosów. Używając OOP możemy zaprogramować
ogólne zachowanie stosów i stosować je do różnych sytuacji.
Nieformalnie koncepcję polimorfizmu można opisać jako:
Jedna metoda, wiele możliwości wykonania
Wybranie odpowiedniej możliwości wykonania w zależności od
kontekstu wywołania jest sprawą kompilatora a nie programisty.
13
Pierwszy program
class Example{
public static void main(String args[]){
System.out.println("To jest prosty program
napisany w języku Java");
}
}
Patrz plik: Example.java
W języku Java plik zawierający kod programu zazwyczaj nazywa się tak
jak zdefiniowana w nim klasa i nazywany jest jednostką kompilacji.
Kompilator Javy wymaga by plik posiadał rozszerzenie .java. Wynikiem
kompilacji jest bytecode w pliku o takiej samej nazwie jak definiowana
klasa i rozszerzeniu .class.
Kompilacja:
$ javac Example.java
Wykonanie: $ java
Example
14
Pierwszy program wyjaśnienia
class Example{
Słowo kluczowe class oznacza, że tu zaczyna się definicja nowej
klasy.
public static void main(String args[]){
Ta linia zaczyna metodę main(). Jest to metoda, która rozpoczyna
wykonanie programu.
public jest specyfikacją dostępu do definiowanych elementów. Tu
oznacza, kod spoza klasy ma dostęp do definiowanego elementu.
Przeciwnym jest private.
static oznacza, że mamy dostęp do definiowanego elementu bez
konieczności tworzenia obiektu danej klasy.
String args[] definiuje tablicę args elementów klasy String,
będących parametrami wywołania programu.
System.out.println("To jest...”);
Do potoku System.out (synonim stdout) wysyła tekst będący
parametrem.
15
Kolejne programy
Zobacz plik Example2.java, zawierający proste obliczenia
numeryczne. Skompiluj i wykonaj program.
“num = “ + num
Jest wyrażeniem wyliczającym się do obiektu typu String. Wartość
num jest rzutowana na jej reprezentację napisową i doklejona do
końca napisu num =
Zobacz plik IfSample.java, zawierający przykłady użycia instrukcji
warunkowej. Skompiluj i wykonaj program.
Zobacz plik ForTest.java, zawierający przykłady użycia pętli
iteracyjnej. Skompiluj i wykonaj program.
Zobacz plik BlockTest.java, zawierający przykłady użycia pętli
iteracyjnej z blokiem instrukcji. Skompiluj i wykonaj program.
16

Podobne dokumenty