dev.gamez.lv Forum Index dev.gamez.lv
Latvian Game Developers Community
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups 

directx'a animācijas
Goto page Previous  1, 2, 3  Next
 
dev.gamez.lv Forum Index -> Microsoft DirectX
View previous topic :: View next topic  
Author Message
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Oct 07, 2007 9:09 pm    Post subject:

ew pag, ja reiz par to publicismu ierunājies, tad pastāsti, lūdzu, kā ārpus klases nelietotās funkcijas liekot starp privātajām dabū kautko labu, piemēram ātrumu? tas ar linkošanu saistīts?
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Oct 07, 2007 9:25 pm    Post subject:

Kādu vēl ātrumu?

Prasti jau klasei liek kautko darīt:
Code:
class Model
{
public:
   Model(filename) { ... } // uzkonstruē

   void draw() const
   {
      // te lieto privātos klases atribūtus position un vertices, lai uzzīmētu
   }

   void update(something x)
   {
      // te ar lieto privātos klases atribūtus
   }

   void doSomethingElseWithPosition(float b)
   {
      position += b;  // kautkāda vēl maģija
   }
private:
   position;
   vertices;
};


Vienkāršu lielumu dabūšanai ir ok rakstīt getterus:
Code:
class X
{
public:
    float getX() const { return _x; }
private:
    float _x;
};


Taču ar setteru rakstīšanu stilā - void setX(float x) { _x = x; } - nevajag daudz aizrauties, ja vairums klases memberu var uzstādīt ar šādiem setteriem, tad tā nav normāla klase, bet gan atkal struktūra, kura izliekās par klasi, tb atkal nepareiza pieeja.

Taču šad un tad šādi setteri ir vajadzīgi un tos lietot ir ok.

Tipiskais (bet varbūt ne ļoti korektais) piemērs ar klasēm un objektiem - klase ir mašīna, objekts konkrēta mašīnas instance, piemēram kaimiņu Jura jaunais BMW. Tam piemīt visādi parametri un detaļas (motors, riepas, ...) - tie vairumā gadījumu ir privāti atribūti. Taču mašīnai var likt kautko darīt - braukt, bremzēt, griezties, ieslēgt ugunis, utt - tās ir publiskas metodes, kas darbojās ar privātajiem atribūtiem (motors, riteņi, lampas, ...)

Palasi kautko par OOP, ja jau gribi OOP programmēt.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Oct 07, 2007 9:31 pm    Post subject:

a par setteriem.. vai tad kautkā privātajiem mainīgajiem nevar piekļūt ar operatora overloading'u? tādā veidā tad varētu setteri taisīt..
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Oct 07, 2007 9:38 pm    Post subject:

Tak ne jau mana piemēra setteru sintakse ir slikta, bet gan vispār setteru būtība - ka tu ar publiskām metodēm tā vienkārši vari sačakarēt objekta stāvokli. Tieši tāpat kā pārrakstot publiskos memberus. Pilnīgi ne ar ko tas nav labāks.

Tas varbūt tā pārāk vienkārši būs pateikts, bet labs OOP ir tad, ja sabojāt objekta stāvokli no ārpuses nav vienkārši. Ja tas (objekts) ar publiskajām metodēm dara tikai to, kas viņam jādara (ielādē no faila, zīmē sevi, saglabā, un tml).

Privātajiem mainīgajiem tu vari piekļūt no:
1) savas klases jebkuras metodes,
2) jebkā, kas ir definēts kā klases friends,
3) ar maģiskiem tipu-pārveidojošiem pointeru kāstiem, kas balstās uz memberu izvietojumu atmiņā. Taču tādu kāstošanu nekad nekad nekad nevajag lietot!
Operatoru overloadingam ar to nav nekāda sakara. Operatori ir parastas klases metodes, tikai definētas nedaudz citādākā sintaksē.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Oct 07, 2007 9:51 pm    Post subject:

zinu, biju nedaudz apskatījis vektora klasi... kā tur ar tiem operatoriem..
hmm, kāpēc tad tā var sačakarēt objekta stāvokli? nesaprotu, ne to, kā tas iespējams, un varbūt pat arī to, ko tieši tu ar to domā?
vispār es agrāk centos pašķirot objektus pa public un private, vienkārši tagad to nedarīju..
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Oct 07, 2007 10:24 pm    Post subject:

Nesaprotu tavus jautājumus. Kas ir ar vektora klasi un operatoriem?

Objekta stāvokli var vienkāši sačakarēt. Idomājies tevi ir klase C, kas satur sevī kautkādus objektus X (dinamiskā masīvā arrX), un to skaitu count:
Code:
class C
{
 public:
   int count;
   X* arrX;

   ... // kautas cits
};

Tā kā abi ir publiski memberi tu tos vari vienkārši no ārpuses mainīt. Nu un tagad iedomājies, kas notiks, ja tu no ārpuses pieskaitīsi pie count skaitli 5 (jo, piemēram, gribi palielināt objektu X skaitu), bet aizmirsīsi pamainīt dinamisko masīvu arrX? Atbilde ir, loģiski, ka programmas krašs kautkur vēlāk, kur tā izmantos masīvu arrX un skaitu count.

Šis ir tikai piemērs, objekta sačakarēšanai obligāti nav jānotiek ar masīviem. Bieži vien ir vairāki klases atribūti, kas ir atkarīgi savā ziņā viens no otra. Un neuzmanīgi operējot ar tiem no ārpuses var viegli visu sabojāt (un cilvēks ir neuzmanīga būtne - viņa dabā IR ielaist kļūdas).

Tāpēc vajag enkapsulēt objekta datus. Vajag tos padarī privātus, lai neviens no ārpuses tos nevar aiztikt. Lai tikai pati klase savās metodēs operē ar privātajiem datiem. Jo tā "zin", kurš atribūts ir atkarīgs no kura, tāpēc tai ir "mazākas" iespējas kautko sabojāt. private tikai palīdz rakstīt kvalitatīvāku kodu un mazāk ielaist kļūdas - tās vienkārši paziņojot jau kompilēšanas laikā pirms tu vēl vari palaist programmu.

Eh.. stāstu OOP pamatus. Paņem atrodi kādu grāmatiņu un palasi. Vienalga ko par OOP. Tur viss šis ir. Nav manos spēkos caur forumu kādam iemācīt OOP.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Oct 07, 2007 10:51 pm    Post subject:

nu ok, skaidrs, kā klasēs nevajag čakarēt objektus!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Oct 07, 2007 10:58 pm    Post subject:

Nav jau runa par speciālu čakarēšana. Sakot čakarēšana, es biju domājis, kā netīša datu sabojāšana. Netīša = bugs. Tapēc tavā teikumā "nevajag" izklausās dīvaini. Neviens jau speciāli netaisīs bugus.

Un ko nozīmē "klasēs"??
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Oct 07, 2007 11:02 pm    Post subject:

nu es tā arī domāju - nevajag kodā (klasēs) pieļaut šādas kļūdas (viss uz public), lai nesačakarētu to klasi!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Sun Oct 07, 2007 11:10 pm    Post subject:

Klasi tu nevari sačakarēt :) Tu vari sabojāt tikai objektu. Objekts ir klases instance.

Ja tu kaimiņu Jura mašīnai izsit stiklu, tu taču nesabojā vispārīgi jekburu mašīnu (klasi), tu sabojā konkrētu instanci - objektu (kaimiņu Jura BMW).
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Sun Oct 07, 2007 11:13 pm    Post subject:

hmm... aizdomīgi... kāpēc tieši kaimiņu Juris un BMW... Very Happy
anyway, spēlēs tas izskatītos smieklīgi, ja vienai mašīnai izšauj stiklu, vairs nevienai nav :D

bet tagad varbūt, lūdzu, pabeidz savu izteikto domu http://dev.gamez.lv/viewtopic.php?t=1430&start=45 te?
jautājums bija šāds: kurš mērījums tad pierādīs, ka externālie calli ir vainīgi?
gaidu atbildi! Smile
vnk man to slow-down'u vajag precīzi atrast! vajag maksimālu performanci!
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
bubu
Indago Uzvarētājs
Indago Uzvarētājs


Joined: 23 Mar 2004
Posts: 3223
Location: Riga

PostPosted: Mon Oct 08, 2007 12:49 am    Post subject:

Neesi pareizi saprastis par manu domu. Tu laikam neatšķir klasi no objekta. Izlasi kautkur pamatus par OOP.
Back to top
View user's profile Send e-mail
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Mon Oct 08, 2007 3:16 pm    Post subject:

nē, nē visu sapratu, klase:
class Klase
{
private:
int ccc;
public:
Klase(int cc);
~Klase();
};
objekts:
Klase k;
vai
Klase* k;
k = new Klase;
vai
std::vector<Klase> k;

visuu zinuu Very Happy
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
DeRatizators



Joined: 27 Apr 2006
Posts: 492

PostPosted: Mon Oct 08, 2007 5:53 pm    Post subject:

snake5 wrote:
nē, nē visu sapratu, klase:
class Klase
{
private:
int ccc;
public:
Klase(int cc);
~Klase();
};
objekts:
Klase k;
vai
Klase* k;
k = new Klase;
vai
std::vector<Klase> k;

visuu zinuu Very Happy


Ja zini, tad pasaki 4 vai 6 vārdos, ar ko atškiras klase no objekta.
_________________
Any PANCAKE has to be long and thin and short and fat. Not to mention being an excellent insulator and a superb conductor.
Back to top
View user's profile
snake5
Indago dalībnieks
Indago dalībnieks


Joined: 27 Jun 2007
Posts: 2590

PostPosted: Mon Oct 08, 2007 5:57 pm    Post subject:

klase ir objekta paraugs, pēc kura tad arī var veidot tādus objektus
_________________
"There are two choices here: "looks good" and "realism"." -- Paul Nettle
Back to top
View user's profile Visit poster's website
Display posts from previous:   
dev.gamez.lv Forum Index -> Microsoft DirectX All times are GMT + 2 Hours
Goto page Previous  1, 2, 3  Next
Page 2 of 3

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group