Priradenie premennej odkazujucej sa na objekt – Java – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Priradenie premennej odkazujucej sa na objekt – Java – Fórum – Programujte.comPriradenie premennej odkazujucej sa na objekt – Java – Fórum – Programujte.com

 

30. 7. 2015   #1
-
0
-

Ahojte.

Moj problem spociva v tom, ze mam vytvorenu triedu Pole, potom triedu Akvarium a v nej vytvaram objekt triedy Pole pole. V triede Akvarium vytvaram odkaz na dvojrozmerne pole, ktoremu priradujem premennu s nazvom akvarium. A teraz otazka:

viem priradit premennej akvarium odkaz na prvok statickePole v triede Pole tak, aby som mohol cez odkaz plnohodnotne pracovat s polom statickePole? Lebo teraz ako to mam spravene tak to nefunguje.

Dakujem

import java.util.Scanner;

public class Hlava{
        public static void main(String[] args){
                Scanner sc = new Scanner(System.in);
                int vyska, sirka;

                System.out.println("zadaj vysku: ");
                vyska = sc.nextInt();
                System.out.println("zadaj sirku: ");
                sirka = sc.nextInt();
                Akvarium akvarium = new Akvarium(vyska,sirka);
                Pole pole = new Pole(vyska,sirka);

                akvarium.vytvorAkvarium();
                akvarium.vykresliAkvarium();
                pole.statickePole();
                pole.vypisStatickePole();

        }
}


import java.util.ArrayList;

public class Pole{

        public int vyska,sirka;
        Integer[][] statickePole;

        public Pole(int vyska,int sirka){
                this.vyska = vyska;
                this.sirka = sirka;
        }

        /**metoda na vytvorenie statickeho dvojrozmerneho
         * pola*/
        public void statickePole(){
                ArrayList<Integer> dinamickePoleVyska = new ArrayList<Integer>(vyska);
                ArrayList<Integer> dinamickePoleSirka = new ArrayList<Integer>(sirka);

                for(int i=0;i<vyska;i++){
                        dinamickePoleVyska.add(1);
                }
                for(int i=0;i<sirka;i++){
                        dinamickePoleSirka.add(1);
                }

                this.statickePole = new Integer[dinamickePoleVyska.size()][dinamickePoleSirka.size()];
        }


        /**metoda ktora mi naplni pole, je to len taka skusobna 
         * metoda aby som vedel ci mi spravne vyalokuje a naplni 
         * staticke pole*/
        public void naplnStatickePole(){
                for(int i=0;i<statickePole.length;i++){
                        for(int j=0;j<statickePole[i].length;j++){
                                statickePole[i][j] = 1;
                        }
                }
        }

        /**metoda ktora mi vypisuje ci som dobre vytvoril staticke
         * pole, je to len skusobna metoda*/
        public void vypisStatickePole(){
                statickePole();
                naplnStatickePole();

                for(int i=0;i<statickePole.length;i++){
                        for(int j=0;j<statickePole[i].length;j++){
                                System.out.print(statickePole[i][j]);
                        }
                System.out.println();
                }
        }
}


import java.util.*;

public class Akvarium{

        public int vyska, sirka;

        public Akvarium(int vyska,int sirka){
                this.vyska = vyska;
                this.sirka = sirka;
        }

        Integer[][] akvarium;
        Pole pole = new Pole(vyska,sirka);

        /**pouzitie triedy pole a jej metody na vytvorenie statickeho
         * pola a naplnenie statickeho pola v triede Pole 
         * a nasledne priradenie premennej akvarium
         * odkaz na vytvoreny objekt pole.statickePole*/
        public void vytvorAkvarium(){
                pole.statickePole();
                pole.naplnStatickePole();
                akvarium = pole.statickePole;
                for(int i=0;i<akvarium.length;i++){
                        for(int j=0;j<akvarium[i].length;j++){
                                akvarium[i][j] = new Integer(1);
                        }
                }
        }

        /**metoda na vypisanie obsahu akvaria*/
        public void vykresliAkvarium(){
                for(int i=0;i<akvarium.length;i++){
                        for(int j=0;j<akvarium[i].length;j++){
                                System.out.println(akvarium[i][j]);
                        }
                System.out.println();
                }
        }

}
Nahlásit jako SPAM
IP: 62.169.189.–
Kit+15
Guru
31. 7. 2015   #2
-
0
-

#1 Michal Konecny
Nechápu, co pohledává pole v akváriu. Raději bych do něj dal rostlinky a rybičky. Dovedu si představit akvárium na poli, ale i taková představa je podivná - ledaže by ho tam nějaký akvarista zapomněl.

Také mi není jasné, proč dynamické pole nazýváš statickePole a seznamy nazýváš
dinamickePoleVyska a dinamickePoleSirka.

Metoda vytvorAkvarium je zbytečná - vytvoření akvária by mělo být součástí konstruktoru.

Totéž s metodou statickePole. Kromě toho, že jsi zapomněl na sloveso, její kód patří do konstruktoru.

V metodě Hlava.main() máš proměnnou pole. Tato proměnná je lokální a z jiných částí aplikace není vidět. Ve třídě Akvarium máš další instanční proměnnou pole. Je to jiná proměnná.

Proti řádku "akvarium = pole.statickePole;" možná překladač neprotestuje, ale je to úplný nesmysl včetně následujících cyklů. Místo toho úplně stačí zavolat "pole.vypis();" a příslušný kód přesunout do třídy Pole.

Zkus se vyhýbat názvu proměnné "pole", "statickePole" apod. - jinak se budeš do svých programů neustále zamotávat. Říká se tomu maďarská notace, které je dobré se vyhýbat. Jestli je pole statické nebo není, poznáš podle klíčového slova "static" a jestli to je či není pole, poznáš podle deklarace. Při volbě názvu se soustřeď na to, co je v tom poli, jestli ředkvičky nebo okurky a podle toho zvol název proměnné.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
31. 7. 2015   #3
-
0
-

#2 Kit
Dakujem. Popracujem na sebe   

Nahlásit jako SPAM
IP: 62.169.189.–
Petr
~ Anonymní uživatel
746 příspěvků
31. 7. 2015   #4
-
0
-

#2 Kit
V Java komunite pokud se bavime o statickem poli a dynamickem poli, tak pod tim chapeme neco jine nez v jazyce C. V C se pod slovy staticky a dynamicky chape jestli je pole staticky nebo dynamicky alokovane, tzn. jestli jsi dany objekt vytvoril staticky nebo volanim malloc / new, ktere vrati ukazatel na kus pameti / novy objekt.

V Jave mame dynamicky alokovane prakticky vsechno. Takze pokud se bavime o statickem / dynamickem poli / strukture tak pod tim chapeme, jestli se je mozne do takoveto struktury neomezene pridavat prvky aniz by tuto strukturu bylo nutne vytvorit znovu.
Pokud se na to budeme divat takto, pak vsechna "pole" v jave jsou staticka, protoze jakmile jim jednou definujes velikost a chces ji prekrocit tak musis puvodni pole zahodit a vytvorit nove.

Nyni k rozdilu mezi polem a kolekci, kolekce jsou dynamicke datove struktury, nekolik implementaci kolekci simuluje chovani poli a interne jsou implementovany pomoci prostych poli. Kdyz se podivas napriklad na implementaci metody add() u ArrayListu tak v jave 7 / oracle JVM to vypada takto:

public boolean add(E e) {
        ensureCapacityInternal(size + 1);  // Increments modCount!!
        elementData[size++] = e;
        return true;
    }

Jak je patrne interne ArrayList pracuje s polem, metoda ensureCapacityInternal ve vysledku zpusobi ze pokud kapacita pole nestaci tak se zavola ve vysledky toto:
 

elementData = Arrays.copyOf(elementData, newCapacity);

Coz prevedeno do terminologie jazyka C by pravdepodobne znamenalo volani malloc s newCapacity, nasledne memcpy a pote free na stary ukazatel, pripadne myslim ze v C byl nejaky realloc, ktery tohle udela za tebe.

Mohl by jsi namitnout, ze ArrayList vlastne vytvari novou instanci pole, takze nesplnuje definici dynamickeho pole, ovsem je potreba si uvedomit, ze jedine co nove vznika a zanika je ta interni reprezentace tohoto pole, nikoli cely objekt ArrayList, ktery obsahuje spoustu dalsich dat, ktera zustavaji zachovana (v jave to proste lepe udelat nejde).

@Michal:

K tematu, pokud chces neco seriozne psat v jave tak se vyhni pouziti prostych poli, pokud to tedy nevyzaduje zadani nebo se nesnazis optimalizovat pro rychlost. Snaz se pouzit kolekce, protoze jsou dostatecne flexibilni pro vetsinu uloh.

Pokud opravdu potrebujes dvourozmerne pole tak bych bud zkusil vyuzit mapu, a nebo pokud opravdu nejde jinak tak List<List<Integer>> twoDArray = new ArrayList<>(); Coz je vlastne List ktery bude obsahovat Listy Integeru.

Pokud vytvoris objekt nekde ve svem programu a potrebujes s nim pracovat jinde, pak ho do jineho objektu proste predej jako parametr metody nebo konstruktoru.

Nahlásit jako SPAM
IP: 83.240.112.–
Kit+15
Guru
31. 7. 2015   #5
-
0
-

#4 Petr
Proč do toho pleteš jazyk C? Bavíme se o Javě a OOP, ve kterém se pole téměř nepoužívá. Pole v Javě je většinou jen implementační detail, zpravidla pracujeme s kolekcemi.

Pole se pozná tak, že k jeho elementům přistupuješ pomocí celočíselného indexu. Nevylučuji, že v akváriu může nějaké pole být - třeba každý cm3 může obsahovat nějaký element, ale je to jen spekulace.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:d5d7:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
NotBeginner
~ Anonymní uživatel
185 příspěvků
31. 7. 2015   #6
-
0
-

#4 Petr

Kitovi to nevysvětluj, je to ztráta času, on je prostě divný. Co se týče této problematiky(dynamická pole) jeho názory ignoruj, je to o nervy.

Nahlásit jako SPAM
IP: 217.112.161.–
ondrej39+1
Věrný člen
1. 8. 2015   #7
-
0
-

#6 NotBeginner
Divný rozhodně není, má recht, ten kluk.   

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
NotBeginner
~ Anonymní uživatel
185 příspěvků
6. 8. 2015   #8
-
0
-
Nahlásit jako SPAM
IP: 217.112.161.–
Kit+15
Guru
6. 8. 2015   #9
-
0
-

#8 NotBeginner
Slíbil jsi, že na mne nebudeš reagovat. Aspoň by ses měl trochu pocvičit v chápání anglického textu, než tady začneš argumentovat. Pár citací ze zmíněného linku:

Pops: In Java, "normal" arrays are fixed-size. You have to give them a size and can't expand them or contract them.You have to give them a size and can't expand them or contract them.

MattGrommes: Arrays in Java are of fixed size. What you'd need is an ArrayList, one of a number of extremely valuable Collections available in Java.

Mnementh: Arrays are fixed size once instantiated. You can use a List instead.

cspann: I disagree with the previous answers suggesting ArrayList, because ArrayList is not a Dynamic Array but a List backed by an array.

Poslední citace snad zní jasně: ArrayList není dynamickým polem, ale seznamem vytvořeným prostřednictvím pole. Tak tady nepleť začátečníkům hlavy a pořádně si přečti, na co odkazuješ.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ondrej39+1
Věrný člen
6. 8. 2015   #10
-
0
-

#8 NotBeginner
Jestli jsou češi nejgeniálnější, to nevím. Ale rozhodně nejsme hloupí lidé a ty se tady hádáš kvůli věcem, které jsou úplné základy. Že něco jako úplně surové pole, které se ti samo zvětší, když překročíš jeho velikost v Javě nexistuje (a nejenom tam, ani například v C, C++ nebo C# nic takového nenajdeš), to je věc, kterou bys měl znát hned jak s poli začneš pracovat.

Jak píše Kit, jediný důvod, že do ArrayListu můžeš cpát kolik prvků chceš, aniž by sis pro jeden prvek hned na začátku alokoval místo třeba na 10 000 000 000 prvků, je ten, že při použití insert metody třídy ArrayList si třída sama zjistí, zda je třeba pole zvětšit a pokud ano, tak ti prostě alokuje místo nové.

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
Kit+15
Guru
6. 8. 2015   #11
-
0
-

#10 ondrej39
Ono to celé pramení z chybného překladu slepence "ArrayList", jehož významem není "pole", ale "seznam". Je to patrné i z toho, že je implementován abstrakt "List", nikoli "Array".

LinkedList je také seznamem a také implementuje rozhraní List. U něj si to však nikdo s polem nesplete. Snad.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ondrej39+1
Věrný člen
6. 8. 2015   #12
-
+1
-
Zajímavé
Kit +

#11 Kit
Tak pořád, alespoň mně, dává dává větší smysl ArrayList než C++kový std::vector :D.

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
Kit+15
Guru
7. 8. 2015   #13
-
0
-

#12 ondrej39
C++ je samostatnou kapitolou, protože je optimalizován víc k železu než k programátorovi a má to vliv i na žargon, který kolem tohoto jazyka vznikl. Proto mají programátoři v C++ a Javě obvykle potíže se domluvit. Javista víc přemýšlí nad abstrakcí, Cckař zase nad fyzickou reprezentací.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:2117:...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
NotBeginner
~ Anonymní uživatel
185 příspěvků
10. 8. 2015   #14
-
0
-

#13 Kit

Reagoval jsem na Ondřeje ale vidím že vy dva jste se tak dlouho hledaly až jste se našly.

To že si vybereš některé citace podporující tvé tvrzení nic nemění.  Tak jako já mohu citovat příspěvky tvrzení podporující ArrayList je dynamické pole.

Titulek článku je  :

"Variable length (Dynamic) Arrays in Java" a nejvíce plusů má odpověd  : Yes: use ArrayList.

a mohl bych pokračovat vytrženými větami z kontextu či citacemi z knih ale diskuze s pomateným ztrácí vždycky smysl.

Závěr : Celý Collection Framework jsou dynamická pole(neboli pole a proměnou velikostí) a už se s tím smiř. 

Nahlásit jako SPAM
IP: 217.112.161.–
Kit+15
Guru
10. 8. 2015   #15
-
0
-

#14 NotBeginner

Zmínil jsi můj nick v negativním významu, což vnímám jako pomluvu.

Titulek článku napsal začátečník, který se ptal, jak se v Javě dělá dynamické pole. Uvedené citace jsou ze čtyř nejlépe hodnocených odpovědí, tedy od nejváženějších členů fóra. Uvedená citace "Yes: use ArrayList" je rychlým řešením problému. Další odstavec to však uvádí na pravou míru. Možná jsi tak daleko už nedočetl.

Závěr: Kolekce jsou z velké čási implementovány pomocí polí, ale to ještě neznamená, že to jsou pole. S tím se smiř. Nemohu za to, že nerozeznáš v angličtině podstatné jméno od přídavného.

... a nejsme ženy.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Petr
~ Anonymní uživatel
746 příspěvků
10. 8. 2015   #16
-
0
-

#15 Kit
Ano titulek článku napsal začátečník, problém vidím v tom, že ty jsi dříve v jiném vláknu označil za dynamické pole následující konstrukci:

Dynamické pole vzniká v Javě takto: 

int[] pole = new int[size];

podle hodnoty size se dynamicky vytvoří pole.

http://programujte.com/forum/vlakno/29701-metoda-na-prevod-poli/

Nezlob se na mě, ale pokud by mi přišel někdo na pohovor s tím, že umí javu a označil toto za dynamické pole tak ho velice rychle přesvědčím, že toto dynamické pole opravdu není. A pravděpodobně bych ho bral jako nevyhovujícího, pokud by si seděl na káblu.


Pokud bychom se bavili o dynamických polích a on(a) by mi tvrdil(a), že ArrayList není dynamické pole, pak bych si to nechal vysvětlit, aby bylo jasné, že tomu rozumí a chápe jak to uvnitř funguje.

Myslím, že není nutné slovíčkařit ohledně těchto věcí, podstatné je, aby si lidi rozuměli pokud se o něčem baví a mám problém s tím jak podáváš tuto problematiku lidem, kteří jsou v javě noví. Myslím, že jim vnášíš chaos do hlav tím, že dogmaticky označuješ něco jako dynamické pole a něco jako statické pole a oni pak uslyší z druhé strany něco úplně jiného.

Nahlásit jako SPAM
IP: 83.240.112.–
Kit+15
Guru
10. 8. 2015   #17
-
0
-

#16 Petr
Pokud si recruiter plete pole s kolekcí, tak se s ním fakt nemá cenu o programování bavit.

Teď ještě důkaz: 

List<Integer> seznam = new ArrayList<Integer>();
Object seznam2 = new ArrayList<Integer>();
Object[] seznam3 = new ArrayList<Integer>();

První dva řádky projdou, třetí neprojde. Přitom seznam3 je jediný z nich deklarován jako pole.

A co třeba LinkedList(), který má totožné rozhraní. Je to podle tebe pole nebo není?

Slovo "list" v angličtině neznamená "pole", ale "seznam". Totéž platí i pro názvy tříd "ArrayList" a "LinkedList". Jsou to také seznamy, tedy kolekce. Nemohu za to, že to někdo nedokáže správně přeložit.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ondrej39+1
Věrný člen
10. 8. 2015   #18
-
+1
-
Zajímavé
Kit +

#16 Petr
Peťo, myslím si, že jediný, kdo tady někomu mate hlavu, je (Not)Beginner, který se mermomocí snaží procpat, že něco jako dynamické pole opravdu v Javě existuje, což je nesmysl.

Pochopitelně se může do této problematiky člověk, který nemá příliš zkušeností, zamotat, ale nakonec programování není věc, kterou se člověk naučí za den, ale musím k tomu tak nějak časem přijít. A že někdo na začátku tápe, to je zcela normální.

NotBeginner to možná nemyslí špatně, ale jeho schopnosti vyjadřování jsou bohužel velmi zlé. A pak na konec ještě pro jistotu jednou opět plácne, že "Celý Collection Framework jsou dynamická pole(neboli pole a proměnou velikostí) a už se s tím smiř," což je úplná kravina.

#14 NotBeginner
Jestli máš zájem zaobírat se terminologií, pak věř, že Collection Framework je sbírka ADT sloužící k uchovávání dat v konzistentních strukturách. O dynamická pole, jak framework označuješ ty, se bohužel ovšem nejedná.

Pokud by ti tedy někdo v budoucnu položil otázku, jak vhodně uchovávat data jednotného typu, aniž bys předem znal jejich počet, je vhodné jim generickou kolekci doporučit jakožto strukturu, která si sama potřebnou velikost obstará, není ovšem vhodné mu doporučovat něco jako dynamická pole, protože ta v Javě opravdu nejsou (dynamicky alokovaná ano, dynamická nikoliv). Protože ve finále i ten sprostý ArrayList je obal pro dynamicky alokované pole se statickou velikostí, který si vyhradí prostor dle toho, kolik ho potřebuje.

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
Ovrscout
~ Anonymní uživatel
113 příspěvků
11. 8. 2015   #19
-
0
-

ehm, moc pěkná diskuze tady :)

Zřejmně je to poněkud nesnáze s temíny a překlady. Zkusím to sepsat jak to vidím já a prosím věcné reakce, komentáře či nasměrování hlavně směrem k javě. (Pro jistotu uvádím že znám hlavně C, trochu C++ a C#, tak na mne prosím buďte hodní, javu a její terminologii moc nebo spíš vůbec neznám.)

O zmatení pojmů a tak celé dohromady
Pojem "pole" se mi zdá být jasný, tedy,skoro.
Obecně se tím většinou rozumí skupina prvků s danným pořadím kterým se dá přistupovat pomocí číselného indexu.Na rozdíl od kolekcí, které musí umět "alespoň" iterovat ale přístup přes index není povinost.
Pole mohou být různého typu, repektive s různými přívlastky (např staticky či dynamicky alokovaná, s proměnnou či fixní velikostí).
Pak tu máme datovou strukturu "pole" neboli "Array", bez přívlastků, které už má poměrně specifický popis, vlastně to asi specifikuje nejen vnější chování ale i základ vnitřní organizace dat.
Víceméně takto: základní datová struktura "pole" je skupina či seznam prvků s pevně daným počtem prvků(při vytvoření) kde prvky mají definované pořadí a dá se knim přistoupit dle číselného indexu, např česká a anglická wiki.
Tomu v Javě zřejmně odpovídá typ Array.
Pak tu máme další zmatení jako například staticky a dynamicky alokované pole, celkem běžně označované zkráceným popisem statické a dynamické pole.(původem hlavně z C ale stále má svůj význam v C++ C# atd i když tedy zřemně né v javě)
To ale může být ambivalentní s datovou strukturou dynamické pole neboli Dynamic Array(viz níže) která má jinou a také celkem přesnou definici. Takže správně by to mnělo být zřejmně plným opisem "Dynamicky alokované pole"  a "Datová struktura Dynamické pole".Ale toho by mněl člověk plnou pusu či prsty při psaní proto se to zkracuje páč lidi jsou líní :) , Důležité je pak sdělit a chytit kontext.

Nyní se pokusím zachytit význam Dynamic array z různých směrů:

Dynamic array poprvé
Dynamické pole neboli "Dynamic array" považuji za synonymum  pro pole s proměnnou velikostí (které jako implementační detail může používat např. dynamicky alokované pole fixní velikosti), i en wiki mi v tomto dává za pravdu, ačkoliv zde už tento implementační detail čátečně považují za specifikaci této datové struktury se jménem  "dynamické pole"/"Dynamic array". V popisu ArrayList-u je napsáno že se jedná o Resizable-array(které implementuje rozhraní listu- tedy je možno iterovat ..), což je ve wiki zmíněno jako jedno z alternativních označení pro Dynamic array. Navíc je na té wiki ArrayList přímo vypsán jako příklad a implementace souhlasí s tím jak již byla vylíčena v jednom z předchozích komentářů zde na fóru. Tedy Array list odpovídá specifikaci datového struktury Dynamické pole/Dynamic array


Dynamic array podruhé
Pokud se týká obecnějšího pohledu, tak k položkám ArrayList-u lze přistupovat pomocí indexu , což ho (u mne) kvalifikuje jako pole (obecný popis, ne datová struktura "pole"). A né to že se to nezapisuje do složených závorek mi nevadí, to je jen věc syntaxe nikoliv přístupu k datům.
ArrayList je ale také je to kolekce neboť umožnuje použít iterátory.
A umí měnit svou velikost "dynamicky" dle potřeby.
Implementace,aneb "to co je uvnitř" je samozřejmně zajímavá např. z hlediska výkonu,chování v určitých situacích atp. Ale z venku se to chová jako dynamické pole. Proto to je dynamické pole.
Ostatně mne překvapilo že Java k tomu podobně jako já:) viz ArrayList Implements List<E>, RandomAccess.
Neboli kolekce (chceteli seznam) udržující pořadí prvků s přístupem (také) pomocí indexů List<E>.
Ke které lze rychle (většinou O1) přistupovat pomocí indexů RandomAccess.
 

Dynamic array potřetí
Ještě mne napdl jeden pohled, a to z hlediska hiearchie tříd. Tam je Array jasně odděleno od Collections (pod které ArrayList patří). Zde bych ale nepoužíval překlad Array->Pole protože "Array" je jasně specifikovaná třída. A pole je jen obecný název. když už tak asi třída objektů Array/pole.
 

Takže na konci se mi to zůžilo na dvě/tři otázky:

  • Který význam pole/array a dynamické pole/dynamic array je vám nejbližší?
    (obecný, datová struktura, třída?)
  • Jaká je obecná specifikace datové struktury Dynamic Array?
    (odkaz, obecný nebo i specifický pro javu)
  • Případně pokud to mám celé blbě :)  tak i popis toho co podle vás dělá "pole" polem a "dynamické pole" polem dynamickým.

P.S. nechci flame jen tak se trošku připovzdělat

Nahlásit jako SPAM
IP: 188.120.223.–
Kit+15
Guru
11. 8. 2015   #20
-
0
-

#19 Ovrscout
Rozdíl je hlavně v úrovni abstrakce. Pole, tedy Array, je odvozeno od fyzické struktury v paměti. To znamená sada buněk stejné velikosti od nějaké adresy, s nějakým přírůstkem, nějaké velikosti. Takové pole velmi dobře známe z C.

Objektové programování však přišlo s jiným pohledem. Chce odstínit programátora od přemýšlení nad fyzickou strukturou a vytvořilo sémantické výrazové prostředky, které lépe vystihují realitu. V reálu nikdo neřekne "dynamické pole zaměstnanců", ale použije mnohem výstižnější výraz "seznam zaměstnanců". U závodů se sice používá "startovní pole", ale pod tímto pojmem si spíš představím indexy namalované na vozovce, na které závodníci postaví své stroje. Jinak se používá pojem "startovní listina", kde ze slova "listina" je už patrný pojem "seznam". "seznam závodníků" už je jasný.

Když se obyčejný člověk baví o kolekcích, zcela přirozeně používá slova "seznam" nebo "slovník", méně často "množina". Pojem "dynamické pole" však nepoužije snad nikdo.

Programátor, který myslí ve stylu strukturovaného programování, tedy tíhne k pojmu "pole", který vystihuje fyzickou strukturu. V jazyce C je to standard.

Programátor, který myslí objektově, používá raději abstraktní pojmy. Tedy když se realita dá popsat slovem "seznam", tak nepoužije fyzický výraz "pole", resp. "Array", ale abstrakci "seznam", tedy "List". Při konkrétní implementaci pak volí mezi třídami "ArrayList" a "LinkedList". Vystihuje to i zápis 

List<Zamestnanec> zamestnanci = new ArrayList<Zamestnanec>();

který říká: Chci vytvořit seznam zaměstnanců a použiji k tomu seznam implementovaný pomocí pole.

Celá debata tady je jen o úrovni abstrakce. Programátor píšící strukturovaně používá pojem "pole", programátor píšící objektově používá v daném případě pojem "seznam" nebo označení pro jinou vhodnou kolekci.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Ovrscout
~ Anonymní uživatel
113 příspěvků
11. 8. 2015   #21
-
0
-

Zajímavé,

Pro mne je význam "pole" spíš bližší vašemu seznamu, než "nativnímu" poli hodnot(fyzické uspořádání hodnot v paměti).
I když váš pojem "seznam" mi spíše přijde jako to čemu říkám List(položky s definovaným pořadím přístupné dle indexu). Nebo že by pro vás pojem "seznam" jen obecným označením pro skupinu položek?

Mám malinký problém s prohlášením  §zcela přirozeně používá slova "seznam", ...§ já bych raději řekl list nebo kolekce, protože mi to přijde přirozenější a přesnější než jen seznam, Je ale pravda že asi nejsem tak obyčejný člověk ale programátor, a to jednoho poznamená :) .
Holt jste asi jiná škola a máte své zaběhlé termíny.Takže po zvážení situace, s tím vlastně nemám zase až takový velký problém.

Kdybych slyšel "Dynamické pole zaměstnanců", tak po včerejším pátrání by to ve mně vzbudilo dojem že se nejedná o obecný popis "pole s proměnnou velikostí" ani "dynamicky alokované pole) ale o konkrétní typ datové struktury - viz ta en wiki čili prakticky ArrayList.

Přiznávám se že historicky asi tíhnu k strukturovanému programování.

Každopádně děkuji za reakci. Teď už snad víceméně rozumím jak jste to myslel.

Nahlásit jako SPAM
IP: 193.165.79.–
Ovrscout
~ Anonymní uživatel
113 příspěvků
11. 8. 2015   #22
-
0
-

#21 Ovrscout
Lépěji řečená první část věty:  Pro mne je význam "pole" spíš bližší pojmu "List", ..

Nahlásit jako SPAM
IP: 193.165.79.–
Kit+15
Guru
11. 8. 2015   #23
-
0
-

#21 Ovrscout
Seznam je kolekcí, u které nemá význam index, ale vzájemné pořadí položek. U závodníků mě až zas tak nezajímá, že Adam byl v cíli 5:07 a Bohouš doběhl za 4:56 - to by správně měly být indexy. Místo toho mi stačí sdělení, že Bohouš byl rychlejší než Adam. Čas se pak stává pouhým atributem, který mě zajímá až sekundárně - i když se podle něj řadí výsledky.

Když se obyčejného člověka zeptám, co je to list, tak mi odpoví, že je to papír nebo že je to část stromu, která na podzim opadává. Kolekce je zase ta krabice, která se kupuje k Vánocím, aby bylo co pověsit na stromeček. Jsou to slova přejatá z angličtiny, která v češtině získala specifický význam. Zmíněným pojmům List a kolekce rozumí programátoři, nikoli však obyčejní lidé a a dokonce ani lidé vzdělaní v jiném oboru. Zato slovu seznam rozumí každý, i ten obyčejný člověk, který chodí podle podle seznamu nakupovat. Máme i telefonní seznam, seznam doporučené literatury, seznam lidí, kteří mě se..u, seznam zaměstnanců, seznam úkolů,...

U seznamu úkolů se zastavím: Mám první, druhý a třetí úkol. Pokud ten první splním, tak ho ze seznamu vyškrtnu. Druhý se automaticky stane prvním, třetí se stane druhým. Kdyby to bylo pole úkolů, k žádnému posunu by nedošlo - druhý úkol by stále měl index 2 a třetí by měl index 3. Právě proto, že by se na tyto indexy aplikace odkazovala a posun by byl nežádoucí.

Těmi pojmy se dlouhodobě zabývám a jsem i spolutvůrcem českého programátorského názvosloví. Tyto pojmy se probírají na odborných fórech. Prezentuji zde výsledky koncenzu, se kterými jsem se ztotožnil.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Flowy0
Věrný člen
12. 8. 2015   #24
-
0
-

az na to ze pri zozname ta poradie nezaujima ...

Nahlásit jako SPAM
IP: 213.160.177.–
https://github.com/Flowy
Petr
~ Anonymní uživatel
746 příspěvků
12. 8. 2015   #25
-
0
-

#24 Flowy
No právě, když si sebou vemu do obchodu seznam věcí, které mám koupit, tak mi moc nezáleží na tom v jakém pořadí jsou napsané, problém je v tom, že List se z angličtiny opravdu překládá jako seznam, ale Čeština (nebo Slovenština) to chápe špíše jako výčet dat, u kterých nezáleží na pořadí.

Některé věci by se neměly z angličtiny překládat, já jsem třeba nikdy nepoužil slovo seznam pro List nebo jeho implementace, protože pod seznamem opravdu chápu něco jiné.

Nahlásit jako SPAM
IP: 83.240.112.–
Kit+15
Guru
12. 8. 2015   #26
-
0
-

#24 Flowy
Článek je seznamem odstavců a dalších entit. Skutečně tě nezajímá jejich pořadí?

Pokud tě nezajímá pořadí, není to seznam, ale množina. Pokud v SQL dáš příkaz SELECT, výsledkem je množina relací, na kterou se dále používají běžné množinové operátory. Pokud zadáš klauzuli SORT BY, stane se z ní seznam.

Existuje hodně seznamů, u kterých nezáleží na pořadí, ale není to obecným pravidlem.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
NotBeginner
~ Anonymní uživatel
185 příspěvků
12. 8. 2015   #27
-
0
-

#17 Kit
Na to se fakt už nedá reagovat.

List ano, v překladu je to seznam. Jenom připomenu že List není class a nemuže být instancí ale obyčejný interface, který umožnuje jenom volat metody z rozhrani List.

LinkedList nebo ArrayList není v překladu seznam i když funkce seznamu má implementovanou viz. API

ArrayList - (http://docs.oracle.com/javase/8/docs/api/java/util/ArrayList.html) doslovný překlad : polový seznam nebo seznam pole. ( zavisí na tom jak se to někomu chce lépe česky číst )

LinkedList - (http://docs.oracle.com/javase/8/docs/api/java/util/LinkedList.html) doslovný příklad : spojový seznam.

Faktem je že to co tu blekotáš jsou nějaké tvoje pseudofantazie a navzájem se vnich s určitou skupinou lidí utvrzujete. Už jsem psal že diskuze s pomatenými nemá smysl a dost mě unavuje a navíc chudák moje nervy.

Prostě dál si klidně rozšiřuj své bludy. Jak už jsem jednou řekl v C, C++ a jiných jazycích které neovládm jsi možná dobrý ale Javě znáš maximálně syntaxy.

#18 Ondřej39

Chahahaha, aspoň někdo kdo uklidnil mé nervy a mohl jsem se dosyta vysmát. Tvůj NoName NICK zde v oblasti fóra Javy prakticky nikdy nikomu nepomohl, nedodal části funkční zdrojů začátečníkům a proto tvůj názor je naprosto bezpředměntný. Jsi NIKDO. Nikdy jsem si nevšilm že bys někomu pomohl, to už Kit je tedy aktivnější. 

Pak tvůj směšný pokus o kvalitní argumentaci. Ty jsi snad dodal nějaké citace,odkazy? ISBN knih která potvrzují vaš výklad? Toto je jenom fórum v mikrozemičce kde se střetl názor na verzi výkladu u cca max. 10 lidí a je to tedy naprosto bezvýznamné. Ovšem pro egocetnrika je to alfou a omegou.

Co se týče Collection Frameworku jsou tu jenom tvé blbé kecy jako argument. Ani jsi nebyl schopen vymyslet argument např. kolekci, jenž by zpochybnila mé tvrzení, že např. existuje kolekce která má pevnou(statickou) velikost a nemění se v průběhu práce s ní. Neumíš ani myslet, abys vymyslet trapný argument proti mému tvrzení.

#17 Kit

Už zase ta tvoje verze výkladu objektového programování? Mlč, ty jsi prostě blázen, bez dostatečné sebereflexe která jenž by ti umožnila aby ti docvalko že ty tvé bláboly chápeš snad jenom ty sám a jsou v rozporu s desítkami zahrančních knih.

Existuje jenom OOP příp. OOA,OOD( Object Oriented Programing ) známé jako zapouzdření(encapsulation),dědičnost(inheritance) a polymorfismus(polymorphism). Tvůj výklad jen jenom filozofické blábolení na úrovni Kanta.

Končím v této diskuzi, která jen tak mimochodem nijak tazately nikterak nepomohla  

Nahlásit jako SPAM
IP: 217.112.161.–
Kit+15
Guru
12. 8. 2015   #28
-
0
-

#25 Petr
Manželka většinou napíše na nákupní seznam to nejdůležitější na začátek. Pokud napíše něco důležitého níž, tak je to tím, že si na to vzpomněla později. Pokud je to důležitější, ráda by to posunula na začátek, ale kvůli editační vlastnosti papíru do alternativně podtrhne.

Máme seznamy číslované a nečíslované. U číslovaných je zpravidla pořadí významné.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
12. 8. 2015   #29
-
0
-

#27 NotBeginner
Bylo by užitečnější, kdybys místo osobních útoků na diskutující předložil i nějaké skutečné argumenty. Argumenty Ad hominem jsou v diskuzích skutečně k ničemu a jenom se tím zbytečně shazuješ.

Jenom číst nestačí. Je nutné ten text i chápat.

Pokud je OOP hlavně zapouzdření, dědičnost a polymorfismus, tak proč to většina programátorů v Javě nebo C# nepoužívá a stále to šmudlí procedurálně?

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Petr
~ Anonymní uživatel
746 příspěvků
12. 8. 2015   #30
-
0
-

#28 Kit
A teď si představ, že se ti něco nevleze na konec papíru a napíšeš to na bok, pak druhý bok, měly by být tyto nové položky považovány za začátek nebo konec seznamu, nebo někde uprostřed? :) Pokud řekneš číslovaný seznam, abecední seznam pak ano to jsou konkrétní příklady seznamů, kde říkáš že ti záleží na pořadí ale když mi někdo řekne slovo seznam tak neočekávám, že pořadí má význam. Tedy dokud se nezačneme bavit o konkrétním typu seznamu. Abych se dostal zpět do kontextu této diskuze, je podstatné jak to chápe nováček v programování, který neví nic o kolekcích nebo polích. Celkem by mě zajímal průzkum na toto téma :)

Nahlásit jako SPAM
IP: 83.240.112.–
Petr
~ Anonymní uživatel
746 příspěvků
12. 8. 2015   #31
-
0
-

#27 NotBeginner
Nezlob se na mě, ale bez ohledu na to, že souhlasím s tvým pohledem na věc (mám na mysli javu, nikoli osobní rovinu), ti musím říct, že osobními útoky vůči komukoli v diskuzi dosáhneš jediného, budeš sám za vola. 
Můžeš sice tvrdit, že ti nezáleží na tom co si ostatní myslí a říkají, ale kdyby to byla pravda, tak by jsi neměl důvod sem opakovaně reagovat.
Dále si myslím, že shazovat něčí názor argumenty typu jsi NIKDO, protože tu máš málo příspěvků je velice hloupé, působí to dojmem, že sám nemáš argumenty k tomu aby jsi oponoval názoru jiného účastníka diskuze.
Pokud už nemáš další argumenty a řekl jsi všechno co se dalo, tak je přece velice jednoduché nereagovat. Opravdu si myslíš, že pokud budeš mít poslední slovo v diskuzi tak to znamená, že jsi vyhrál? Pokud někdo argumentuje hloupými argumenty, které nedávají smysl v kontextu tvých předchozích argumentů, tak to není potřeba komentovat, protože každý inteligentní člověk, který si přečte diskuzi od začátku to uvidí.

Nahlásit jako SPAM
IP: 83.240.112.–
Kit+15
Guru
12. 8. 2015   #32
-
0
-

#30 Petr
Nákupní seznam, u kterého nemá význam pořadí, je spíše množinou věcí, které mám koupit. Pojmy užívané v běžném životě mají určitou vágnost v definicích, která se nám při specifikace druhu kolekce nemusí hodit.

Třída (skupina žáků) ve škole je v programování kolekcí. Můžeme ji chápat jako:

  • množinu (Je přítomen Hliník?)
  • seznam (Kdo je přítomen?)
  • slovník (Jaké známky má Hliník z češtiny?)

Záleží na úhlu pohledu a typu dotazu do takového systému. V OOP není právě jednoduché z těchto důvodů vybrat tu správnou kolekci. Databáze SQL však elegantně podchytí všechny tři jedinou strukturou. Typ požadované kolekce si pak vybíráme až v době dotazu.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Kit+15
Guru
12. 8. 2015   #33
-
0
-

#27 NotBeginner

List ano, v překladu je to seznam. Jenom připomenu že List není class a nemuže být instancí ale obyčejný interface, který umožnuje jenom volat metody z rozhrani List.

To je přesně to, co potřebujeme. Proto uvádím zápis 

List<Zamestnanec> zamestnanci = new ArrayList<Zamestnanec>();

jako vzor. Umožní mi to používat požadovaný polymorfismus. Pokud někdy v budoucnu zaměním třídu ArrayList třeba za DirectoryList, udělám ji pouze v tom jednom místě. Na zbytek aplikace to nebude mít žádný vliv.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
ondrej39+1
Věrný člen
12. 8. 2015   #34
-
0
-

#27 NotBeginner
Ty jsi opravdu debil, hele. Běž se někam léčit.  

Nahlásit jako SPAM
IP: 79.141.243.–
Inject all the dependencies!
Kit+15
Guru
12. 8. 2015   #35
-
0
-

#34 ondrej39
Nesnaž se být jako on. Nech to plavat.

Nahlásit jako SPAM
IP: 2a00:1028:83a0:37a6:207:e...–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 37 hostů

Podobná vlákna

Priradenie SESSIONS — založil tomi86

Volanie funkcie z premennej — založil radypala

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý