background image

Języki Programowania 

 

 

Podstawowe pojęcia 

 

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 

 

background image

Programowanie komputera

Sprzet

Jezyk maszynowy

Assembler

Jezyk wysokiego poziomu

Fortran

C, C++

Pascal

Kompilacja

Egzekwowanie
programu

Narzedzia programistyczne

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

background image

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 

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 
 

background image

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 

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; 

background image

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  FORTRAN program 
C  Prints "Hello world" 10 times 

      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++ 

Java 

JavaScript 

background image

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 

background image

13 

Rodzina języków programowania 

14 

Popularność JP 

Java 

C++ 

background image

15 

Popularność JP 

Java 

C++ 

PHP 

Python 

C# 

JavaScript 

Perl 

16 

Popularność JP – TIOBE Index 

background image

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 

background image

10 

19 

Szybkość programów dla danych języków programowania 

www.bagley.org/~doug/shoutout

Completely Random and Arbitrary 
Point System