MQL5'te OOP hakkında sorular - sayfa 2

 
Yuriy Asaulenko :
Yeter artık. Bir kişi zaten başlangıçta yalnızca OOP ile meşgul. Hatta sadece bir fincan kahve. Bazı desenlerdeki kırılmalar nereden geliyor? IMHO, sorunlarını öğrencilere aktaran aptal öğretmenlerin saçmalıkları.
Dikkatlice oku. Bundan bahsediyorum, bir kişi başlangıçta görevlerini OOP'ye yakın bir tarzda belirler ve çözer. Ama sonra prosedürel programlama öğretilir. Ondan sonra şablonlar bozulur çünkü. insan düşüncesinden çok farklı olan prosedürel programlamadır (OOP değil).
 
Vasiliy Sokolov :

OOP'nin hiçbir şekilde kod olmadan açıklanması gerekir ve sınıflar, nesneler, işaretçiler vb., vb. Gibi bu karmaşık terminolojiden herhangi biri.

Klasik programlama nasıl çalışır? İlk başta, öğrenci acı içinde insan düşüncesinden temelleri programlamaya geçmeye çalışır (her türlü döngü, işlev, değişken ve diğer saçmalıklar vardır, diğer gerekli "bilgi bagajları"). Daha sonra fonksiyonların, değişkenlerin ve if'lerin başındaki karışıklık az çok düzenli bir yapı oluşturduğunda öğrenciye denilir: "Bak: OOP diye bir şey var. Size daha önce öğretilenleri unutun ve bir şey gibi düşünmeye başlayın. yine insan" Bunu kalıplarda bir kırılma izler, bu kadar zorlukla elde edilen "bilgi bagajı" çöpe atılır ve kişi kendini cennet ile yer arasında bir yerde bulur. Doğal olarak, bu "OOP" daha sonra birkaç yıl boyunca beynin geri kalan kıvrımlarında bir ürperti ve acı ile bir kabus olarak hatırlanır (sonuçta geri kalanlar yeni bilgiler tarafından yakıldı).

Hayır, programlamayı öğrenmek için programlama öğrenmeniz gerekmediğini kategorik olarak beyan ederim. Aksine zararlı ve tehlikelidir. Bunun yerine düşünmeyi öğretmek gerekir. Ve bununla klasik öğretim yönteminde tam bir başarısızlık.

bir makale yazacaktı
 
pako :
bir makale yazacaktı
Gerek yok
 
pako :
bir makale yazacaktı

Belki. Ancak Aleksey, OOP'yi açıklamakta daha da iyi olabilir.

 
Комбинатор :
Gerek yok
Zaten yazıyor musun?
 
Numara )
 
Комбинатор :
Numara )
ve yazmayın :)
 
Vasiliy Sokolov :
Dikkatlice oku. Bundan bahsediyorum, bir kişi başlangıçta görevlerini OOP'ye yakın bir tarzda belirler ve çözer. Ama sonra prosedürel programlama öğretilir. Ondan sonra şablonlar bozulur çünkü. insan düşüncesinden çok farklı olan prosedürel programlamadır (OOP değil).

İlk önce prosedürel programlamayı öğrenmede yanlış bir şey görmüyorum. Roman yazmayı öğrenmek için, normal alfabeyi ve söz dizimini öğrenerek ve sadece okuma ve yazmayı öğrenerek başlamak iyi bir fikirdir.

Aslında basit C/Pascal vb. ile programlama yaparken bile nesneleri iç yapılarını ve işleyişini bilmeden zaten manipüle ediyoruz. Bunun bir nesne olduğunu açıklamak ve ardından bu nesnelerin nasıl inşa edileceğini öğretmek için kalır.

 
Alexey Volchanskiy :

....

Soru:

10 dakika boyunca MQL5'teki OOP konularını bana anlatın YouTube'a koyayım yani herkes için faydalı olacak

------------------

İlginç olan her şeyi yaz, ben hallederim, boş zamanlarımda isteklerinizi karşılamaya çalışırım.

İyi şanlar))

Nesnelerle çalışmayı aydınlatın.
 

Sorunu çözmeye yardımcı olun. İki düğme ve bir satır var. Bir tuşa basıldığında satırı düzenleme modunda görüntüler, bırakıldığında satırı siler. İkinci düğmeye basıldığında düzeltir, bırakıldığında düzenleme moduna geri döner. Her düğme , "Çizgi" nesnesinin rengini ve diğer bazı özelliklerini değiştirebilir. "Line" nesnesi global düzeyde ayarlanır. Düğmeleri oluşturduktan hemen sonra, "Düğme" nesnelerinin içindeki referans değişkenini değiştirirken, tüm değişiklikler global "Satır" nesnesinde saklanacak şekilde her düğmeye "Çizgi" nesnesine bir referans iletmek mümkün müdür.

Aşağıda, bir düğmeyi tıklamak yerine basitleştirilmiş bir komut dosyası çizdim - "Çizgi" nesnesinin sayacını artıran ekleme () işlevi. "Line" nesnesini referans yoluyla bir fonksiyon argümanı olarak iletmenin mümkün olduğunu anlıyorum, ancak sadece çalışan versiyonda, bu tür birkaç fonksiyon var, bu yüzden bağlantıyı en baştan bir kez iletmek istiyorum. Onlar. Bunu, Btn1.addition() veya Btn2.addition() çağrıldığında, gLine.count sayacını artıracak şekilde yapmanın bir yolu var mı?

 class CLine
{
     public :
           int    count;
                CLine( void ){count= 0 ;};
               ~CLine( void ){};
};


class CMyButton
{
     private :   
     public :
                CLine m_Line;
                CMyButton( void ){};
               ~CMyButton( void ){};
              
                 void bind(CLine &aLine) {m_Line = aLine;}
                 void addition() {++m_Line.count;}
};




CMyButton  Btn1;
CMyButton  Btn2;

CLine gLine;

void OnStart ()
{
   Btn1.bind(gLine);
   Btn2.bind(gLine);
   
   Print ( "Line.count=" , gLine.count);
   Btn1.addition();
   Print ( "Line.count=" , gLine.count, "  Btn1.m_Line.count=" , Btn1.m_Line.count);
   Btn2.addition();
   Print ( "Line.count=" , gLine.count, "  Btn2.m_Line.count=" , Btn2.m_Line.count);
   Btn1.addition();
   Print ( "Line.count=" , gLine.count, "  Btn1.m_Line.count=" , Btn1.m_Line.count);
   Btn2.addition();
   Print ( "Line.count=" , gLine.count, "  Btn2.m_Line.count=" , Btn2.m_Line.count);
}

Bu şimdi bana ne oluyor: