1 / 18

Statično in objektno

Statično in objektno. Statične komponente. V razredu Kvader public static final int MIN_DOL_STR = 1; final gre za konstanto Nič novega, že poznamo static Obstajajo neodvisno od obstoja objekta tega razreda Le en primerek za cel razred! Math.PI. Statične spremenljivke.

clark-wall
Download Presentation

Statično in objektno

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Statično in objektno

  2. Statične komponente V razredu Kvader public static final int MIN_DOL_STR = 1; final gre za konstanto Nič novega, že poznamo static Obstajajo neodvisno od obstoja objekta tega razreda Le en primerek za cel razred! Math.PI

  3. Statične spremenljivke public class Foo { static public int x = 13; public int y; public Foo(int z) { this.y = z; } } x: statična komponenta, y: objektna (nestatična) komponenta Statične komponente: vsebovane v razredu, objektne komponente: v objektih. Vsak objekt vsebuje svojo kopijo objektnih komponent, vsaka statična komponenta pa vedno obstaja v eni sami kopiji. Foo t1 = new Foo(42); Foo t2 = new Foo(30); Dva objekta - dve kopiji komponente y, po eno v vsakem objektu. Ker je komponenta x statična, vedno obstaja v eni sami kopiji, tudi če nimamo nobenih objektov razreda Foo:

  4. Uporaba statičnih spremenljivk Različne konstante Enolična identifikacija Objekt naj ima svojo serijsko številko Denimo, da so te številke zaporedne Vedeti, katera je bila dodeljena zadnja Zadnja dodeljena številka: ni lastnost objekta, ampak cele skupine objektov Vedno, ko je določen podatek skupen za vse objekte tega razreda Kako vemo, ali naj bo komponenta statična ali objektna? Statične komponente so tiste, ki so skupne za celoten razred – niso posebna lastnost enega (ali nekaj) primerkov objektov tega razreda.

  5. Statične komponente - dostop public ali private (odvisno od željenega načina dostopa) public praviloma le, če gre za konstante zaradi final ni težav s pravilnostjo podatkov konstante imajo način dostopa private, če jih želimo "skriti" pred uporabniki

  6. Statične komponente - naslavljanje Naslavljanje (če je dostop public) ime_objekta.ime_komponente ali ime_razreda.ime_komponente ali (znotraj razreda) ime_komponente Praviloma: ime_razreda.ime_komponente Izogibamo seime_objekta.ime_komponente, saj ta komponenta ni vezana na objekt! Ni potrebno, da bi sploh obstajal kak objekt te vrste

  7. Zajec Radi bi vedeli, koliko zajcev imamo Števec ustvarjenih objektov NI lastnost posameznega zajca SKUPNA lastnost private static int kolikoZajcev = 0; Na začetku 0 Spreminjamo takrat, ko ustvarimo novega zajca new V konstruktorju! Serijska številka naj bo zagotovo enolična Določimo jo le enkrat – ob rojstvu (konstruktor) ZAJEC_n (če je to n-ti zajec) ZajecNov.java

  8. Novi razred Zajec public class Zajec { // SKUPNE SPREMENLJIVKE private static String OsnovaSerijska = "ZAJEC_"; private static int kolikoZajcev = 0; public static final int MIN_TEZA = 0; // minimalna teža public static final int MAX_TEZA = 10; // maksmialna teža // OBJEKTNE SPREMENLJIVKE private String serijska; private boolean spol; private double masa; // konstruktorji public Zajec() { this.spol = true; // vsem zajcem na začetku določimo m. spol this.masa = 1.0; // in tehtajo 1kg ZajecNov.kolikoZajcev++; // NAREDILI SMO NOVEGA ZAJCA this.serijska = ZajecNov.OsnovaSerijska + ZajecNov.kolikoZajcev; }

  9. Novi razred Zajec public Zajec(boolean spol, double masa) { this(); // poklicali smo konstruktor Zajec() - ta bo že povečal število zajcev + naredil nj. ser. številko this.spremeniTezo(masa); // uporabimo metodo za sprem. this.spol = spol; } // get/set metode public double povejTezo() { // težo bomo povedali le na 0.5 kg natančno int tezaKg = (int)this.masa; int decim = (int)((this.masa - tezaKg) * 10); if (decim < 3) return tezaKg + 0.0; if (decim < 8) return tezaKg + 0.5; return tezaKg + 1.0; }

  10. Novi razred Zajec public boolean spremeniTezo(double novaTeza) { // smislena nova teza je le med MIN_TEZA in MAX_TEZA if ((novaTeza > MIN_TEZA) && (novaTeza <= MAX_TEZA)){ this.masa = novaTeza; return true; // sprememba uspela } // v nasprotnem primeru NE spremenimo teže // in javimo, da spremembe nismo naredili return false; } public String povejSerijsko() { return this.serijska; } // public void spremeniSerijsko(String s) { TO IZLOČIMO; KER SE SER_ŠT NE SPREMINJA! public boolean jeSamec() { return this.spol; } // ker se spol naknadno NE spremeni, metode za // spreminjanje spola sploh ne ponudimo uporabniku!

  11. Novi razred Zajec // Ostale metode public double vrednost(double cenaZaKg) { // pove vrednost zajca // zajce tehtamo na dogovorjeno natančnost return cenaZaKg * this.povejTezo(); } public boolean meNapojiti() { // ugotovimo, če ga je smiselno // napojiti, da bomo "ujeli" naslednjih pol kg // dejanska teža je večja od "izmerjene" return (this.masa - this.povejTezo() > 0); } } // Zajec

  12. Zgled Zgled 1: Štetje ustvarjenih objektov V konstruktorjih povečujemo števec Kvader_nov.java Zgled 2: Uporaba konstant Meje pravilnosti podatkov so konstantne Kovanec_nov.java

  13. Statične metode Objekt: Objektne komponente Objektne metode Skupno vse objektom – na nivoju razreda statične metode statične komponente Statične metode se v neobjektnih programskih jezikih imenujejo "funkcije" ali "procedure", statične komponente pa se imenujejo "globalne spremenljivke".

  14. Statične/objektne metode Statično metodo bla() v razredu Foo lahko vedno izvedemo z ukazom Foo.bla(). Znotraj statične metode objekt this ni definiran, ker se statična metode ne kliče na objektu. Objektno metodo hej() v razredu Foo lahko izvedemo, če imamo neki objekt x razreda Foo, z ukazom x.hej(). Znotraj metode hej() označuje this objekt, na katerem je metoda poklicana.

  15. Zgled public class Foo { static public int x = 12; public int y; public Foo(int z) { this.y = z; } public static int f(int a) { return x + a; } // ali return Foo.x + a; public int g(int a) { return this.y + Foo.x + a; } // ali y + Foo.x + a ALI y + x + y ALI ... }

  16. Zgled Statična metoda f ima dostop do (statične) komponente x. Dostopa do komponente y nima, saj znotraj statične metode ne moremo pisati this.y. Objektna metoda g ima dostop do komponente this.y, kjer je this objekt, na katerem je metoda g klicana. Prav tako ima dostop do (statične) komponente x. int p = Foo.f(7); // p == 12 + 7 == 19 Foo.x = -3; int q = Foo.f(5); // q == -3 + 5 == 2 Foo t = new Foo(100); Foo s = new Foo(200); int r = t.g(50); // r == 100 + (-3) + 50 == 147

  17. Statične metode Kadar za izvajanje ne potrebujemo objekta tega razreda Praviloma ne spreminjajo stanja nekega objekta Vsi podatki podani preko parametrov metode main Razred Math Kovanec_nov.java

  18. Privatne metode Tudi metode so lahko privatne objektne, statične private void metodaA() {...}; private static int metodaB{...}; Kadar metodo potrebujemo interno – uporabnikom ni potrebna!

More Related