Proste definicje [czym są parametry, kompozycja, referencje]

0

Siemka mam parę pytań:

  1. czy argument metody to to samo co parametr metody?
  2. dlaczego dziedziczenie jest błędem
  3. jak najprościej wytlumaczyć co to jest kompozycja?
  4. czy konstruktor może coś zwracać?
  5. String x = "Żaba". x to w tym wypadku referencja tak?
  6. Animals animal = new Animal(); -> jak nazwiemy tutaj ten 'animal'? to też referencja? czy instancja klasy? czy może instancja klasy to cała linijka?

Będę wdzięczny za każdą odpowiedź nawet po jednym słowie :)

2
  1. Ja osobiście te pojęcia traktuję wymiennie, ale przeczytaj to: https://pl.wikipedia.org/wiki/Argument_(informatyka)
  2. Nie jest błędem stosowanie dziedziczenia. Niezbyt rozumiem kontekst pytania - ale zapewne chodzi o coś takiego jak stosowanie interfejsów zamiast dziedziczenia. Przeczytaj dyskusję http://programmers.stackexchange.com/questions/75189/why-avoid-java-inheritance-extends, tam jest kilka fajnych odpowiedzi o co w tym chodzi.
  3. Klasa zawiera w sobie obiekty innej klasy.
  4. Nie.
  5. Dla mnie to jest po prostu zmienna ;-) Typu Animal. Instancja klasy (czyli obiekt) Animal. I przy okazji zmienna wskazująca na typ obiektowy, czyli w zasadzie referencja.

To są pytania na jakiś egzamin, tak? Jakoś tak wyglądają, jakby wykładowca chciał zagiąć na dziwnych terminach.
Uwaga: nie znam się na Javie, odpowiadam jak czuję ;-)

0

Znam odpowiedź na jedno pytanie:
Ad.1

public ToJeArgumentMetody toJeNazwaMetody(String toJeParametrMetody){
	//treść metody
}

tyle przynajmniej wyniosłem z kursu :D

1
  1. Kwestia nomenklatury, bo argument metody to na pewno to co przekazujesz do metody bezpośrednio. Ale parametrem metody, czyli czymś od czego zależy wykonanie metody, technicznie rzecz biorąc może być też np. pole klasy czy jakiś singleton. To zależy co autor miał na myśli.
  2. Nie jest błędem, ale stosować sie je powinno w bardzo konkretnych sytuacjach, a poza nimi stosować kompozycje i delegacje.
  3. Kompozycja to zawieranie w sobie obiektów innych klas, często zamiast dziedziczenia lepiej zaimplementować interfejs, jako pole mieć obiekt klasy "bazowej" a większość metod po prostu delegować do tego obiektu.
  4. Z punktu widzenia składni nie.
    5,6 To znów kwestia nomenklatury. Za pomocą new tworzysz instancje klasy / obiekt klasy, ale odwołujesz sie do niego poprzez referencje.
0

tak, egzamin :) a czy odnosnie kompozycji to np mam:

Ksiazka lektura = new Ksiazka(); // w tym momencie jest kompozycja?
lektura.metoda(); // czy w tym?
// czy jej nie ma jeszcze? :)

1

Nie ma bo nie widać gdzie ten kod jest ;] Jak będzie w main() to o żadnej kompozycji nie ma tu mowy.

class MojeOkienko implement OkienkoInterface{
    private final OkienkoInterface okienko = new StandardoweOkienko(); //kompozycja!
    
    @Override
    public void cośtam(){
        okienko.cośtam(); //delegacja
    }

    @Override
    public void cośtam2(){
        // jakis nasz kod
    }    
}
0

Nie, kompozycja jest wtedy, kiedy masz obiekt innej klasy wewnątrz swojej klasy, na przykład:

class Biblioteka 
{
    public List<Ksiazka> Ksiazki;
    public Bibliotekarka Bibliotekarka;
}
1

Ad 1) najprościej to zapamiętać tak:
http://stackoverflow.com/a/1788926

Argument = argument wywołania = czyli to jak wywołujesz funkcję = może być np. (2*3+1)
Parametr = parametr działania funkcji = czyli to co widać wewnątrz funkcji = musi być nazwany

0
Shalom napisał(a):

5,6 To znów kwestia nomenklatury. Za pomocą new tworzysz instancje klasy / obiekt klasy, ale odwołujesz sie do niego poprzez referencje.

Ad 5 Ja bym powiedział, że "x" to zmienna, która przechowuje referencję. Nazywanie samego "x" referencją byłoby IMO dziwne. Brzmi jak nazywanie pracownika mcdonalda "frytki", bo trzyma je w rekach (czyli przechowuje). Jeżeli się mylę proszę o sprostowanie.

0

Moje skromne zdanie:

  1. Tak na prawdę parametr i argument to to samo (zawsze znajdzie się ktoś kto powie że jedno to to, a drugie to tamto).
  2. Nie jest błędem, ale czasem (lub często) ciężej się utrzymuje taki kod. Ja np mega rzadko stosuję dziedziczenie.
  3. Nadanie dwóm klasom takich samych interfejsów? Chyba. (Chodzi o to żeby "z zewnątrz" polegać na abstrakcji, nie na implementacji; kompozyt jest po to żeby traktować kilka obiektów jako jeden o jednym interfejsie).
  4. Z definicji, chyba nie.
  5. W tak prostym przypadku chyba wszyscy się zgodzą że x to zmienna. Przechowuje ona referencję do obiektu "Żaba".
  6. To samo. animal to zmienna przechowująca referencję do instancji klasy Animal.

PS:

Animal first = new Animal();
Animal second = first;
Animal third = second;

W przypadku wyżej mamy jedną instancję obiektu (tylko raz stworzyliśmy obiekt new Animal()), oraz 3 zmienne (first, second i third) które przechowują referencje do tego obiektu.

PS2:

Animal first = new Animal();
first = new Animal();
first = new Animal();

W tym przypadku instancji jest 3, ale tylko jedna zmienna która przechowuje referencję do ostatniej (bo ostatnia była przypisana).

1 użytkowników online, w tym zalogowanych: 0, gości: 1