Programovanie (1) v C/C++
1-INF-127, ZS 2024/25
Letný semester, prednáška č. 1
Obsah
Organizácia predmetu v letnom semestri
Základné črty jazyka Java a programovania v ňom
Prvoradým cieľom tohto predmetu je zvládnutie základov objektovo orientovaného programovania (OOP) prostredníctvom programovacieho jazyka Java. Na úvod je užitočné vedieť o tomto jazyku nasledujúce:
- Základné syntaktické konštrukcie jazyka Java sú v mnohom veľmi podobné jazykom C a C++. Už tento týždeň by sme mali zvládnuť prepísať do Javy väčšiu časť programov z minulého semestra; budúci týždeň by to už mali byť úplne všetky programy.
- Jazyk Java je silne (aj keď nie čisto) objektovo orientovaný. Použite tried – ktoré sú popri objektoch základným konceptom OOP – je nutné na napísanie aj toho najjednoduchšieho programu.
- Na druhej strane je triedu možné použiť aj ako obyčajný „obal” pre niekoľko metód (t.j. funkcií) podobného typu ako v minulom semestri. Takýmto spôsobom budeme s Javou pracovať na dnešnej prednáške. S ozajstným objektovo orientovaným programovaním začneme až budúci týždeň.
- Programy v jazyku Java sa obvykle nekompilujú do strojového kódu, ale do tzv. javovského bytekódu. Po skompilovaní programu teda nedostávame bežný spustiteľný súbor, ale súbor, ktorý možno spustiť na javovskom virtuálnom stroji (angl. Java Virtual Machine; skr. JVM). Vykonávanie takýchto programov je síce o niečo pomalšie, zato sú však prenositeľné medzi rôznymi operačnými systmémami a architektúrami.
Celkovo ide o jazyk omnoho vyššej úrovne, než jazyk C: v oveľa väčšej miere sa tu abstrahuje od počítačovej architektúry. Java napríklad neumožňuje priamy prístup k pamäťi počítača a o uvoľňovanie alokovanej pamäte sa stará JVM automaticky prostrednictvom mechanizmu tzv. garbage collection. Hoci teda jazyk nie je príliš vhodný na nízkoúrovňové programovanie, tvorba „bežných” používateľských programov je tu podstatne pohodlnejšia, než napríklad v jazyku C. Okrem toho Java disponuje veľkou knižnicou štandardných tried (Java Class Library; skr. JCL), v ktorej je okrem iného implementované aj množštvo algoritmov a dátových štruktúr. Orientáciu v možnostiach ponúkaných touto knižnicou značne uľahčuje dokumentácia k nej.
Rozdiel v úrovni abstrakcie medzi jazykmi C a Java sa premieta aj do typického programátorského štýlu. Od efektívnosti samotnej implementácie sa dôraz obvykle posúva k aspektom softvérového inžinierstva, ako sú napríklad čitateľnosť, rozšíriteľnosť a „spravovateľnosť” kódu. S niektorými elementárnymi princípmi softvérového inžinierstva sa zoznámime aj na tomto predmete.
Prvý program v jazyku Java
Tradične začneme programom, ktorý na konzolu vypíše text Hello, World!.
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
package hello;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
Príklad o niečo rozsiahlejšieho programu
import java.util.*;
public class Program {
/* Spocita sucet prvkov pola a.
*/
public static int sum(int[] a) {
int result = 0;
for (int i = 0; i <= a.length - 1; i++) {
result += a[i];
}
return result;
}
/* Spocita priemer hodnot prvkov pola a.
*/
public static double average(int[] a) {
return (double) sum(a) / a.length;
}
/* Najde najvacsi prvok pola a.
*/
public static int max(int[] a) {
int max = Integer.MIN_VALUE; // Premenna ma rovnaky nazov ako metoda
for (int i = 0; i <= a.length - 1; i++) {
if (a[i] >= max) {
max = a[i];
}
}
return max;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] a = new int[n];
for (int i = 0; i <= n - 1; i++) {
a[i] = scanner.nextInt();
}
scanner.close();
System.out.println("Sucet: " + sum(a));
System.out.println("Priemer: " + average(a));
System.out.println("Maximum: " + max(a));
}
}