Thread overview
C++ robot eli
Jan 31, 2016
erdem
Feb 01, 2016
erdem
January 31, 2016

Öncelikle uzun bir aradan sonra herkese merhaba :)

Geçenlerde iş için bir mülakata girdim. Orada bir el nesnesinin parmak nesnesi kullanarak modellenmesini sordular. Benim çözümüm şuna benzer bir şeydi:

#include <iostream>
#include <vector>

using namespace std;

class Vector3 { /* ... */ };

class Parmak
{

public:

   Parmak(int no)
       :no_(no)
   {}
   void hareketEt(Vector3 nereden, Vector3 nereye)
   {
       cout << no_ << " numaralı parmak hareket ediyor" << '\n';
   }
private:
   int no_;

};

typedef vector<Parmak *> Parmaklar;

class El
{

   const int parmakSayisi_;
   Parmaklar parmaklar_;

public:

   El(int parmakSayisi)
       : parmakSayisi_(parmakSayisi)
   {
       for (int i = 0; i < parmakSayisi; ++i)
       {
           parmaklar_.push_back(new Parmak(i));
       }
   }

   void hareketEt(Vector3 nereden, Vector3 nereye)
   {
       Parmaklar::iterator konum;

       for (konum = parmaklar_.begin(); konum != parmaklar_.end(); ++konum)
       {
           (*konum)->hareketEt(nereden, nereye);

       }
   }
};



int main()
{
   const Vector3 nereden;
   const Vector3 nereye;
   El robotEli = El(5);
   robotEli.hareketEt(nereden, nereye);
}

Aslında bu eli gerçek bir robot eli olarak düşünürsek elin hareketEt() işlevi parmakları hareket ettirmek yerine başka bir konuma hareket edebilir. Ya da baş parmağın hareketEt() işlevi ile diğer parmakların hareketEt() işlevleri farklı olabilir. Çünkü baş parmakta tek bir eklem diğer parmaklarda iki eklem var.

Ya da robot sadece bir parmağını hareket ettirmek isteyebilir. O zaman her parmağın da konum bilgisini ayrı tutmalıyız.

Tabi tüm bunları biraz da sohbet olsun diye yazıyorum ;-)

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

January 31, 2016

Alıntı (erdem):

>

Öncelikle uzun bir aradan sonra herkese merhaba :)

Heeey! Nerelerdeydin? Neler oldu? :)

Alıntı:

>

bir el nesnesinin parmak nesnesi kullanarak modellenmesini

Aklıma ilk gelen, herhalde içerme ilişkisini görmek istiyorlar oldu: El, parmaklar içerir. Senin yaptığın gibi vector olabileceği gibi, aslında her parmak yeterince farklı olduğundan belki de teker teker BaşParmak, İşaretParmağı, vs. diye de eklenebilir.

Parmak'a numara vermen ilk bakışta ters gibi göründü: Kaçıncı olduğunu Parmak değil de, onun sahibi bilsin diye düşündüm ama belki de parmakların farklı kullanışlarını göstermek için kullanılan bir bilgi de olabilir.

Alıntı:

>
> typedef vector<Parmak *> Parmaklar;
> ```


Onu görünce de neden basitçe (ve daha güvenlice) 'vector<Parmak>' olmasın diye düşündüm. (Veya, vector<shared_ptr<Parmak>> filan gibi bir akıllı gösterge ile olmalı.) Hele new ile elde edilen nesnenin sahipliği öyle vector'e verilince atılan bir hatada o nesneler kaybedilir. (delete'i işletecek zaman olmayabilir.)

Alıntı:
>
>
>
        parmaklar_.push_back(new Parmak(i));

Yukarıda da dediğim gibi, o ifade (veya daha sonraki başka bir ifade) hata atsa, vector'de zaten bulunan Parmak nesneleri kaybedilirler (resource leak anlamında).

Alıntı:

>

Ya da baş parmağın hareketEt() işlevi ile diğer parmakların hareketEt() işlevleri farklı olabilir.

Ben de öyle düşündüm. Eğer bir fabrikada olduğu gibi, önceden programlanan hareketlerden bahsediyorsak, belki de parmaklar eş zamanlı olarak ve belki de körlemesine kendilerine baştan verilen küçük hareketleri yapıyorlardır. Sonuçta hepsi topluca tek hareket ediyor gibi görünüordur. (?) Robot konularında hiç bilgim yok aslında. :)

Neyse, kısa süreliğine bile olsa hoşgeldin! Nisan sonunda Ankara'dayım. Eğer yine ara vereceksen tam programı öğrenmek için arada bir buraya bakmayı ihmal etme.

Ali

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

February 01, 2016

Alıntı (acehreli):

>

Heeey! Nerelerdeydin? Neler oldu? :)

Gene Eskişehir'deyim :) Forumu bazen sohbetlere katılamasam da takip ediyordum.

Alıntı:

>

Senin yaptığın gibi vector olabileceği gibi, aslında her parmak yeterince farklı olduğundan belki de teker teker BaşParmak, İşaretParmağı, vs. diye de eklenebilir.

Ben de asıl gerçekleşmenin bu şekilde olabileceğini tahmin ediyorum.

typedef vector<Parmak *> Parmaklar;

Alıntı:

>

Onu görünce de neden basitçe (ve daha güvenlice) 'vector' olmasın diye düşündüm. (Veya, vector<shared_ptr> filan gibi bir akıllı gösterge ile olmalı.) Hele new ile elde edilen nesnenin sahipliği öyle vector'e verilince atılan bir hatada o nesneler kaybedilir. (delete'i işletecek zaman olmayabilir.)

Evet çok haklısınz.

Alıntı:

>

Neyse, kısa süreliğine bile olsa hoşgeldin! Nisan sonunda Ankara'dayım. Eğer yine ara vereceksen tam programı öğrenmek için arada bir buraya bakmayı ihmal etme.

Teşekkürler! :)

Sanırım bundan sonra forumları rahat rahat takip edebilirim. İnşa'Allah haberleşelim o zaman.

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]