1
Języki Programowania
Podstawowe pojęcia
2
Plan wykładu
Właściwości języków programowania
Czytelność kodu
Łatwość programowania
Niezawodność
Ewolucja języków programowania
Język maszynowy
Języki proceduralne
Języki zorientowane obiektowo
Rodzina języków programowania
Popularność języków, trendy, zastosowania
2
3
Programowanie komputera
Sprzet
Jezyk maszynowy
Assembler
Jezyk wysokiego poziomu
Fortran
C, C++
Pascal
Kompilacja
Egzekwowanie
programu
Narzedzia programistyczne
4
Języki …
Jezyk maszynowy
...01100100111011...
Jezyk maszynowy
...01100100111011...
Jezyk naturalny
...niech mi Pan nie przerywa, Panie...
Jezyk naturalny
...niech mi Pan nie przerywa, Panie...
Jezyk niskiego poziomu
Jezyk niskiego poziomu
Jezyk wysokiego poziomu
Jezyk wysokiego poziomu
Jezyk niskiego poziomu
Jezyk niskiego poziomu
Jezyk wysokiego poziomu
Jezyk wysokiego poziomu
3
5
Dlaczego istnieje tyle języków programowania?
Teoretycznie, wszystkie języki programowania są sobie
równoważne
Kompilowane/interpretowane na język
wewnętrzny procesora (asembler)
Dlaczego istnieje tyle języków naturalnych ?
W praktyce, języki naturalne spełniają rozmaite zapotrzebowania
określone przez
Różne kultury (różne obszary zastosowań)
Różne środowiska zawodowe
Różne sposoby postrzegania świata
6
Ewolucja JP
011111110100010101001100010001100000000100000010000000010000000000000000000000
000000000000000000000000000000000000000000000000000000000000000001000000000000
001000000000000000000000000000000001000000000000000000000000000000000000000000
000000000000000000000000000000000000000000001010000100000000000000000000000000
000000000000000000110100000000000000000000000000000000000000000000101000000000
000000100000000000000000010000000000101110011100110110100001110011011101000111
001001110100011000010110001000000000001011100111010001100101011110000111010000
000000001011100111001001101111011001000110000101110100011000010000000000101110
011100110111100101101101011101000110000101100010000000000010111001110011011101
000111001001110100011000010110001000000000001011100111001001100101011011000110
000100101110011101000110010101111000011101000000000000101110011000110110111101
101101011011010110010101101110011101000000000000000000000000000000000010011101
111000111011111110010000000100110000000000000000000000001001000000010010011000
000000000000010101000000000000000000000000100100100001001010100000000000000100
000000000000000000000000000000000001000000000000000000000000101000000001000000
000000000010001001000000010000000000000001000000010101000000000000000000000000
100100100001001010100000000000000100000000000000000000000000000000000001000000
000000000000000000101100000001000000000000000100001000000000000000000000100000
000100000000000000000000000010000001110001111110000000001000100000011110100000
000000000000000000000000000000000000000000000001001000011001010110110001101100
011011110111011101101111011100100110110001100100001000010000000000000000000000
000000000000000000000000000000000000000001000000000000000000000000000000000000
000000000000000000000000000000000100000000001111111111110001000000000000000000
000000000000010000000000000000000000000000000000000000000000000000000000000000
000001000000000011111111111100010000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000001100000000000000000000
001100000000000000000000000000000000000000000000000000000000000000000000000000
000000000000000000000000000000000000000000010000000000000000000000000000000000
000000000000000000000000000000000000000000000000000000000000000000000110000000
000000000000000100000000000000000000000000001101000000000000000000000000000000
000000000000000000000000000000000000001000000000000000000000000000000000000000
000000000000000100010000000000000000000000000000000000000000000000000000000000
000000000010000000000000000000000000000000000000000000000000000010001100000000
000000000000000000000000000000000000000000000000000000000000100000000000000000
000000000000000000000000000000000000101100000000000000000000000000000000000000
000000000000000000000000000000001000000000000000000000000000000000000000000000
000000001101001000000000000000000000000000000000000000000000000000000000100100
000010010000000000000000000000010000000000000000000000000011011100000000000000
000000000000000000000000000000000000000000000000000000100000000000000000000000
000000000000001101000011001010110110001101100011011110010111001100011011100000
pierwsze komputery
(ENIAC)
nie były
programowane
przełom lat 40/50:
kodowanie bezpośrednio
w języku maszynowym
4
7
Ewolucja JP cd.
.file "hello.cpp"
gcc2_compiled.:
.global _Q_qtod
.section ".rodata"
.align 8
.LLC0: .asciz "Hello world!"
.section ".text"
.align 4
.global main
.type main,#function
.proc 04
main: !#PROLOGUE# 0
save %sp,-112,%sp
!#PROLOGUE# 1
sethi %hi(cout),%o1
or %o1,%lo(cout),%o0
sethi %hi(.LLC0),%o2
or %o2,%lo(.LLC0),%o1
call __ls__7ostreamPCc,0
nop
mov %o0,%l0
mov %l0,%o0
sethi %hi(endl__FR7ostream),%o2
or %o2,%lo(endl__FR7ostream),%o1
call __ls__7ostreamPFR7ostream_R7ostream,0
nop
lata 50.: język asembler
mnemoniki (zapis symboliczny)
zastąpiły kody numeryczne
adresy relatywne, etykiety
oddzielny program (assembler)
dokonuje translacji z kodu asemblera
na kod maszynowy
• to jest ciągle kod maszynowy,
niskopoziomowy
8
Ewolucja JP cd.
późne lata 50. – rozwój języków wysokiego
poziomu
programista może używać wyższego
poziomu abstrakcji
•
compiler
translacja całego kodu na kod
maszynowy (np., FORTRAN, C++)
•
interpreter
wykonywanie
(interpretowanie) kodu linia po linii (np.,
BASIC, Scheme)
Java jest hybrydą
• kod źródłowy jest kompilowany na „byte
code”
• „byte code” jest interpretowany prze
maszynę wirtualną Java Virtual Machine
- JVM (JDK lub przeglądarka WWW)
// File: hello.cpp
// Author: Dave Reed
//
// This program prints "Hello world!"
////////////////////////////////////////
#include <iostream>
using namespace std;
int main()
{
cout << "Hello world!" << endl;
return 0;
}
5
9
FORTRAN (Formula Translator)
FORTRAN
był pierwszym językiem
wysokiego poziomu
opracowany przez
John Backus
z
IBM
zaprojektowany dla komputera IBM
704
ukończony w 1957
pomimo pewnych problemów,
FORTRAN
był bardzo popularny w
latach 50. i 60.
FORTRAN
nadal się rozwijał
• FORTRAN II (1958)
• FORTRAN IV (1962)
• FORTRAN 77 (1977)
• FORTRAN 90 (1990)
C
C FORTRAN program
C Prints "Hello world" 10 times
C
PROGRAM HELLO
DO 10, I=1,10
PRINT *,'Hello world'
10 CONTINUE
STOP
END
John Backus
10
C C++ Java JavaScript
C (1971, Dennis Ritchie at Bell Labs)
• przeznaczony do programowania
systemowego (użyty do implementacji
UNIX)
• konstrukcje wysokiego poziomu ale z
dostępem do sprzętu (low-level)
C++ (1985, Bjarne Stroustrup at Bell Labs)
• rozszerzenie C, wprowadzenie obiektów
• również zorientowany obiektowo
Java (1993, Sun Microsystems)
• bazuje na C++, ale prostszy i bardziej
niezawodny
• wyłącznie obiektowy, lepsze wsparcie
dla abstrakcji i sieci
JavaScript (1995, Netscape)
• Język skryptowy dla stron WWW
#include <stdio.h>
main() {
for(int i = 0; i < 10; i++) {
printf ("Hello World!\n");
}
}
#include <iostream>
using namespace std;
int main() {
for(int i = 0; i < 10; i++) {
cout << "Hello World!" << endl;
}
return 0;
}
public class HelloWorld {
public static void main (String args[]) {
for(int i = 0; i < 10; i++) {
System.out.println("Hello World ");
}
}
}
<html>
<body>
<script type="text/javascript">
for(i = 0; i < 10; i++) {
document.write("Hello World<br
/>");
}
</script>
</body>
</html>
C
C++
Java
JavaScript
6
11
Inne znaczące języki
COBOL (1960, Dept of Defense/Grace Hopper)
zaprojektowany dla aplikacji biznesowych, funkcje dla struktur danych i
zarządzania plikami
BASIC (1964, Kemeny & Kurtz
– Dartmouth)
zaprojektowany dla początkujących, popularny w latach 70., (obecnie czasami
stosowany
– BASCOM dla mikrokontrolerów AVR)
Simula 67 (1967, Nygaard & Dahl
– Norwegian Computing Center)
zaprojektowany dla symulacji,
rozszerzenie języka ALGOL do wsparcie klas i
obiektów
Pascal (1971, Wirth
– Stanford)
zaprojektowany dla nauczania ale powszechnie stosowany, (MATLAB bazuje na
języku Pascal)
Prolog (1972, Colmerauer, Roussel
– Aix-Marseille, Kowalski – Edinburgh)
język programowania logiki, programy określone jako zbiór faktów i zasad
Ada (1983, Dept of Defense)
duży i skomplikowany język, zaprojektowany jako oficjalny język rządowy
12
Nie ma idealnego rozwiązania …
pamiętaj
:
nie ma najlepszego (idealnego) języka
programowania
każdy język ma swoje zalety i wady
języki dla określonych aplikacji
biznesowe
COBOL
sztuczna inteligencja
LISP/Scheme, Prolog
programowanie systemowe C
inżynieria
C++, Java, Smalltalk
strony WWW
Java, JavaScript, VBScript, PERL
7
13
Rodzina języków programowania
14
Popularność JP
Java
C++
8
15
Popularność JP
Java
C++
PHP
C
Python
C#
JavaScript
Perl
16
Popularność JP – TIOBE Index
9
17
Popularność cd.
Objective-C
– rozszerzenie
języka C o możliwości
obiektowe (wzorowane na
Smalltalku). Jest używany
głównie w API w systemie
Mac OS X oraz w iOS.
Objective-C zdobywa
popularność dzięki
sukcesom urządzeń
mobilnych iPhone, iPod
touch i iPad.
18
Popularność cd.
http://www.ideachampions.com/weblogs/archives/2011/10/ipod_ipad_ipaid.shtml
10
19
Szybkość programów dla danych języków programowania
www.bagley.org/~doug/shoutout
Completely Random and Arbitrary
Point System