Ing. Stanislav Ondáš, PhD., Ing. Daniel Hládek PhD.
V predmete sa zoznámime so záklanými princípmi objektovo orientovaného programovania a jazykom Java.
Cvičenia: max. 40 bodov - prevažne zo zadaní
Skúška: max 60 bodov - praktickou formou.
Na cvičeniach sa tolerujú maximálne 3 ospravedlnené neúčasti.
Na získanie zápočtu budete potrebovať: min. 21 bodov.
struct PLANETA {
int priemer;
int vaha;
int poloha[3];
int rychlost_rotacie;
float rychlost_pohybu;
};
void TocSA(struct PLANETA* planeta){
rychlost_pohybu = 29.8; // km/h
}
int main(){
struct PLANETA zem;
memset(&zem,0,sizeof(struct PLANETA));
TocSa(&zem);
}
Problémy:
class: center, middle
Pre porovnanie uvediem príklad:
struct Robot {
int bateria;
int rychlost;
int poloha[2];
};
void dopredu(struct Robot* robot){
poloha[0] += 1;
}
int main(){
// Vyhradímne pamäť a určíme ako bude vyzerať
struct Robot karel;
// Aký je počiatočný stav robota? Musíme ho inicializovať
memset(&karel,0,sizeof(struct Robot));
// Čo ak používame zložitejšie členy štruktúry?
// Na inicializáciu potom potrebujeme špeciálnu metódu
dopredu(&karel);
// Čo sa stane s pamäťou?
}
Jazyk C podporuje aj dynamickú alokáciu pamäte:
#include "robot.h"
#include <stdlib.h>
int main(){
// Pracujeme so smerníkmi na pamäť
struct Robot* karel;
karel = malloc(sizeof(struct Robot));
// Na inicializáciu potom potrebujeme špeciálnu metódu
dopredu(karel);
// Koľko chýb obsahuje môj program???
}
Typický program v jazyku C obsahuje definíciu pamäťových štruktúr (struct) a množinu operácií s pamäťou určitého typu.
#include "robot.h"
#include <stdlib.h>
int main(){
struct Robot* karel;
karel = malloc(sizeof(struct Robot));
// Pamäť musíme ručne inicializovať
memset(karel,0,sizeof(struct Robot));
dopredu(karel);
// Pamäť musíme ručne uvoľniť
free(karel);
// v premennej karel je stále adresa pamäte, ktorá ale nie je platná.
// To si musíme pamätať.
}
Syntax je veľmi jednoduchá, dobre sa píše a pamätá
Program je veľmi rýchly - beh má minimálnu réžiu
Programátor má detailnú kontrolu nad situáciou
Program beží blízko k hardware a OS.
Z toho dôvodu sa jazyk C využíva hlavne na písanie operačných systémov, programovacích jazykov a nízkoúrovňových knižníc.
Keď je najdôležitejšia rýchlosť a efektivita.
Keď je potrebné rovnaký systém udržiavať dlhé roky
Aj Java je napísana v C (len jej časti).
Veľké možnosti prinášajú veľkú zodpovednosť - manažment pamäte je náchylný na chyby (pri neomylnosti si môžeme dovoliť nejakú zodpovednosť)
Program je "ukecaný" - musíme explicitne napísať aj "samozrejmé" časti.
Jazyk C nepredpisuje žiadne "overené" postupy.
štandardná knižnica toho obsahuje málo, ostatné knižnice sú často ťažko prenositeľné
pre ladenie musíme využívať nástroje ako je valgrind a gdb
class: center, middle
Java je všeobecný jazyk (General Purpose):
Java je objektovo orientovaný jazyk:
Java je platformovo nezávisla a prenostiteľná (na iný OS, do iného vesmíru):
Java má za úlohu vyriešiť niektoré nedostatky jazyka C a C++.
Java je syntaxou veľmi podobná jazyku C
Rozdiely:
http://benchmarksgame.alioth.debian.org/
Prvá verzia bola uvoľnená v roku 1995 v Sun Microsystem, aktuálna stabilná verzia Java 10 (Oracle). V roku 2006 Sun Javu uvoľnil ako open source.
Programovací jazyk sa pôvodne volal Oak , podľa dubu ktorý stál vedľa kancelárie Jamesa Gosslinga. Projekt neskôr premenovali na Green (Oak) a neskôr Java.
Java znamená káva pôvodom z Jávy.
Java je momentálne jeden z najpopulárnejších jazykov.
Aby nebolo zložité sa naučiť Javu, Gossling využil syntax jazyka C. Jazyk navrhol tak, aby bol jednoduchší na používanie a podporoval objektovo orientovaný prístup. Java rieši niektoré nedostatky klasických prekladaných jazykov.
https://www.javatpoint.com/features-of-java
Podľa počtu profesionálov, kurzov a ponúk: https://www.tiobe.com/tiobe-index/
Podľa počtu vyhľadávaní tutoriálov: http://pypl.github.io/PYPL.html
Write Once, Run Everywhere
class: center, middle
JDK - Java Developent Kit
Zdrojový kód je najprv preložený do bajtkódu
JRE (Java Runtime Environment) - virtuálny stroj pre konečných používateľov. Bajtkód je vykonávaný na virtuálnom stroji.
https://www.javatpoint.com/simple-program-of-java
Čo je potrebné:
class Main {
// Metoda je nieco podobne ako funkcia
public static void main(String args[]){
System.out.println("Hello Java");
}
}
https://www.javatpoint.com/internal-details-of-hello-java-program
Preklad:
class Planeta {
private int priemer = 100000; // das teľo
private int vaha = 56404343; //kus tlusta
private double poloha[] = {5346435,757438439, 43422242};
private float rychlost_rotacie= 0; // zatym še nekruci
private float rychlost_pohybu =0; // zatym še nehybe
// Metóda má prístup k členským premenným a vie ich meniť
public void TocSa(){
rychlost_rotacie = 29,4; // a uš še kruci
}
};
Jazyk Java nás núti, aby sme vždy definovali počiatočnú hodnotu. Program sa nepreloží, ak by sme to neurobili. To eliminuje veľkú skupinu problémov s inicializáciou.
class Main{
public static void main(String args[]){
// Lokálna premenná maticka_zem obsahuje referenciu na novo vytvorený objekt
// maticka_zem je inštancia triedy PLANETA = z teho vyplyva, že žem je planeta.
Planeta maticka_zem = new Planeta();
// Zavoláme metódu objektu
maticka_zem.TocSa();
}
}
ci pana.. a Galileo može spokojne povedzedz: "A predsa še točí".
Uvoľnenie pamäte prebehne automaticky. Java nepozná smerníky, ale referencie na pamäť.
Vtip: Bratislavčan sa pýta: "Prečo vy vychodniari všade dávate to "dz"? Vychodňar: "dze všadzi?"
Na inicializáciu objektu si môžeme definovať špeciálnu funkciu (je to priam užitočné). V nej priradíme počiatočné hodnoty všetkým členským premenným.
class Planeta {
private int priemer = 0; // nula
private int vaha = 0; // nula
private double poloha[] = {0,0,0};
private float rychlost_rotacie= 0; // zatym še nekruci
private float rychlost_pohybu =0; // zatym še nehybe
// pozor!!!! Ide KONSTRUKTOR
public Planeta(){
priemer = 3500000;
vaha = 55555555222;
poloha = {36353443,3423424,768788878};
}
};
class: center, middle
Ako stvoriť svet (wau) ...
Porovnali sme Javu s jazykom C
Predstavili sme si základné princípy Javy
Naučili sme sa z čoho sa skladá trieda:
Zistili sme, ako sa vytvára objekt
Java vám pomáha odhaliť chyby pri práci s pamäťou
BUDEME STVÁRAŤ ĎALEEEEEEJ (možno aj človeka) ;)
Štruktúrované programovanie v Jave
Základy objektovo orientovaného programovania
Zobrazenie vzťahov medzi triedami
https://www.javatpoint.com/ https://go.java/student-resources/index.html
Nainštalujte si Javu 10, IDE IntelliJ Idea a naprogramujte si Ahoj Svet
class: center, middle
http://nlp.web.tuke.sk/oop
ELEM, R. – JOHNSON, R. – VLISSIDES, J. M.: Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley Professional, 1994
https://www.javatpoint.com/ https://go.java/student-resources/index.html
Nainštalujte si Javu 10, IDE IntelliJ Idea a naprogramujte si Ahoj Svet
class: center, middle
http://nlp.web.tuke.sk/oop