Permalänk
Medlem

Varför objektorienterat?

Varför tycker just du att det är bättre att skriva

enemy[1].kill() istället för kill(enemy[1])?

Permalänk
Medlem

Vid objektsorientering blir koden mer strukturerad, man kan kapsla in funktionalitet i klasser osv. Detta gör att man kan bygga små enheter som fungerar oberoende. Detta gör att koden lätt kan återanvändas i andra projekt utan att behöva ändras.

Så, en av de stora fördelarna med objektsorientering är återanvändning. Sen är det ju en bättre beskrivning av verkligheten också, Man bygger ju en modell av verkligheten med hjälp av många små bitar

Visa signatur

Windows XP Pro SP2 x32 | Ubuntu x64 | Firefox | Adobe Photoshop CS2 | Eclipse | Starcraft Broodwar
(X)HTML | CSS | XML | PHP | Java | C++ | vim script |
Daniel Örn, Eagleorn | Google is my friend, and he will be Yours to if You ask him »

Permalänk
Avstängd

Re: Varför objektorienterat?

Citat:

Ursprungligen inskrivet av samiii
Varför tycker just du att det är bättre att skriva

enemy[1].kill() istället för kill(enemy[1])?

Det där är bara två olika syntaxer där en är bättre anpassad bättre för objektorientering. Men syntaxen är inte objektorientering

Objektorientering innebär (om man menar objektorientering för att få bättre struktur på källkod) att man bygger upp funktionalitet kring datamängder.
Har du en datamängd som beskriver ett område i programmet så gör du X antal funktioner som jobbar med denna datamängd i ett slags avgränsat område.

Det blir lättare än om man exempelvis bygger upp strukturen på dataflödet (finns säkert finare ord )

Visa signatur

Programmerare med C++ som huvudspråk.

Permalänk
Medlem

Re: Varför objektorienterat?

Citat:

Ursprungligen inskrivet av samiii
Varför tycker just du att det är bättre att skriva

enemy[1].kill() istället för kill(enemy[1])?

Ptja, det där är ju ett utmärkt exempel av varför polymorfism är praktiskt. Antag att karaktärer inte är det ända som går att döda, utan även något annat. Utan polymorfism så är ju namnet kill redan upptaget.

Visa signatur

Mina boktips: Clean codeHead First Design PatternsHead First Object-oriented Analysis and Design
Innovation distinguishes between a leader and a follower. — Steve Jobs

Permalänk
Medlem

Re: Re: Varför objektorienterat?

Citat:

Ursprungligen inskrivet av DrRotmos
Ptja, det där är ju ett utmärkt exempel av varför polymorfism är praktiskt. Antag att karaktärer inte är det ända som går att döda, utan även något annat. Utan polymorfism så är ju namnet kill redan upptaget.

Nu kan man ju iofs ofta ha flera funktioner med samma namn men olika inparametrar, så just det exemplet är inte så bra.

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Medlem

Re: Re: Re: Varför objektorienterat?

Citat:

Ursprungligen inskrivet av Myris
Nu kan man ju iofs ofta ha flera funktioner med samma namn men olika inparametrar, så just det exemplet är inte så bra.

Inte i t.ex. C eller python (antar att du snackar om function overloading)

Permalänk
Medlem

I C kan man ju inte egentligen objektorientera heller så.

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Glömsk
Citat:

Ursprungligen inskrivet av Myris
I C kan man ju inte egentligen objektorientera heller så.

Det här kan vara relevant: http://xinehq.de/index.php/hackersguide#AEN390

Visa signatur

...man is not free unless government is limited. There's a clear cause and effect here that is as neat and predictable as a law of physics: As government expands, liberty contracts.

Permalänk
Medlem

Re: Re: Re: Varför objektorienterat?

Citat:

Ursprungligen inskrivet av DrRotmos
Ptja, det där är ju ett utmärkt exempel av varför polymorfism är praktiskt. Antag att karaktärer inte är det ända som går att döda, utan även något annat. Utan polymorfism så är ju namnet kill redan upptaget.

Myris svarar med:

Citat:

Ursprungligen inskrivet av Myris
Nu kan man ju iofs ofta ha flera funktioner med samma namn men olika inparametrar, så just det exemplet är inte så bra.

Det är ju det som är polymorfism..

Permalänk
Medlem

Re: Re: Re: Re: Varför objektorienterat?

Citat:

Ursprungligen inskrivet av Superb
Det är ju det som är polymorfism..

Polymorfism är väl ändå om att olika klasser som är relaterade i form av arv kan ha metoder med exakt samma namn och invariabler men har olika innehåll, eller har jag totalt glömt bort vad jag lärde mig på programmeringen?

Visa signatur

E6400 | Freezer 7 pro | P5B-Deluxe | 2gb xms2-6400 | x1900xt 256mb | Tagan 580w easycon | 320 GB sata2 & 160gb+80b sata | X-Fi Xtrememusic | Thermaltake Tsunami

Permalänk
Medlem

Polymorfism är ett annat ord för överlagring, det kan gälla funktioner eller metoder. Gör du två funktioner med samma namn så kan dem arbeta som två enskillda, dock endast om dem har olika argumentlistor.

int func(int tal1, double tal2, char vect[]); - funktion 1

int func(char vect[], int tal1, float flyt); - funktion 2

gör jag nu ett anrop som det här:

func(2, 2.0, hello)

så väljs den funktion som passar bäst in på argumentlistan, det här kan bli en ganska lång process om jämförelsen inte är självklar.

Permalänk
Medlem

Polymorfism är inte ett annat ord för överlagring, polymorfism betyder att olika datatyper kan agera som samma datatyp utan att det blir några problem.

Funktionen str() i Python konverterar olika datatyper till deras sträng-representationer. Den är polymorfisk eftersom den accepterar int, float, listor etc. som in-parameter och resultatet blir alltid en sträng-representation av in-parametern.

Om två datatyper implementerar samma metod, så spelar det ingen roll vilken av de två sorterna man använder för att anropa metoden. Om man t.ex. ska skriva en egen str()-funktion och vill anropa objektens to_str()-metoder, fusk-java:

public string str(Object o) { return o.to_str() } FooBar fb = new FooBar(); BarFoo bf = new BarFoo(); str(fb); str(bf);

Överlagring är en del av polymorfism, men polymorfism består av mer än överlagring.

Permalänk

Polymorfism i C++:

Polymorfism Universell Parametrisk statisk -> via C++ templates Inkluderande/Subtyp dynamisk -> via C++ vtable (subklasser, interfaces) Ad-Hoc Överlagring statisk -> via C++ name mangling Konventerande statisk -> via C++ interna typhieraki eller explicit typkonverting

Den som är nyfiken och vill veta rekomenderas följande:

On Understanding Types, Data Abstraction, and Polymorphism
Luca Cardelli, Peter Wegner
http://citeseer.ist.psu.edu/cardelli85understanding.html

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Myris
I C kan man ju inte egentligen objektorientera heller så.

Klart man kan, men det är lite bökigt.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Psionicist
Det här kan vara relevant: http://xinehq.de/index.php/hackersguide#AEN390

Mm, skitsnyggt. Jag vet att det går, men det är inte snyggt och det är inte praktiskt.

Citat:

Ursprungligen inskrivet av ChristofferC
Klart man kan, men det är lite bökigt.

Därav "egentligen".

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.

Permalänk
Avstängd
Citat:

Ursprungligen inskrivet av Psionicist
Det här kan vara relevant: http://xinehq.de/index.php/hackersguide#AEN390

Intressant artikel, fast argumentet "c++ is simply to slow" vet jag inte ifall jag köper... Om man ändå ska träla och skapa structs till höger oh vänster kan man väl lika gärna gå äver till c++.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Perra82
Intressant artikel, fast argumentet "c++ is simply to slow" vet jag inte ifall jag köper... Om man ändå ska träla och skapa structs till höger oh vänster kan man väl lika gärna gå äver till c++.

Läst allt och plocka det inte ur context

Citat:

The easy answer would be: xine wants to be as fast as possible and C++ is simply too slow. But this is only the easy answer and it is not entirely true any more. Thoughtfully applied, you can write very fast C++ code with today's compilers, but these compilers might not be available on all platforms in the necessary quality. Even with a sophisticated compiler, C++ is much harder to optimize than plain C and thus C compiles much faster. Another big problem is that the C++ ABI is not as well-defined as the C ABI. With C, you can easily mix libraries and applications built by different compilers. With C++, this is unlikely to work.

Visa signatur

Teeworlds - För dig som gillar gulliga saker med stora vapen.

Permalänk
Medlem

Bara så jag har fattat det rätt:

Interfaces i Java är precis det polymorphism handlar om?

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Don_Tomaso
Bara så jag har fattat det rätt:

Interfaces i Java är precis det polymorphism handlar om?

Mm, http://www.lava.se/max/

Visa signatur

I just love the fact that there is a global integer variable named 'i'. Just think, you will never need to declare your loop variable again!
To avoid collisions where a loop that uses 'i' calls another function that loops with 'i', be sure to stack 'i' and restore it when your function exits.