• Nie Znaleziono Wyników

Historia i podstawowe koncepcje

N/A
N/A
Protected

Academic year: 2021

Share "Historia i podstawowe koncepcje"

Copied!
16
0
0

Pełen tekst

(1)

Historia i podstawowe

koncepcje

(2)

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

(3)

Język C

Przez lata standard języka C był wyznaczany przez implementacje systemu UNIX - opisany przez B. Kernighana i D. Ritchie The C

Programming Language.

cd

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

(4)

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.

(5)

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

(6)

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

(7)

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.

(8)

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

(9)

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

(10)

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,

(11)

OOP

klasy

Klasa

Obiekt

Metody prywatne

Prywatne zmienne instancyjne Metody publiczne Publiczne zmienne instancyjne (niezalecane)

(12)

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 Ryba

(13)

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.

(14)

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

(15)

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.

(16)

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.

Cytaty

Powiązane dokumenty

Efektem działania obu postaci operatora jest zwiększenie wartości obiektu o jeden, postaci te różnią się wartością zwracaną, co ma znaczenie,

Jeżeli pierwszy wyraz tego ciągu arytmetycznego zmniejszymy o 7, drugi pozostawimy bez zmian, a trzeci zwiększymy o 3, to otrzymamy trzy kolejne wyrazy ciągu

Uk ład gr af iczny © CKE 2013 Miejsce na naklejkę z kodem WPISUJE ZDAJĄCY KOD PESEL dysleksja EGZAMIN MATURALNY Z MATEMATYKI POZIOM ROZSZERZONY1. Sprawdź,

W tego typu zadaniach należy również uznać odpowiedzi ucznia, jeśli są inaczej sformułowane, ale ich sens jest zgodny z podanym schematem, oraz inne poprawne odpowiedzi

Równanie linii sił pola jest równoważne równaniu linii jednakowego potencjalu (linii ekwipotencjalnych) innego rozkładu ładunków (lub przewodników o stałym potencjale)..