OOP uzmanları için soru. - sayfa 5

 
Artyom Trishkin :
Tüm listeler zaten ikili arama ile donatılmıştır. Ve bu, sıralı numaralandırma değil, istenen özelliğe göre filtreleme anlamına gelir. Sonuç olarak, istenen elemanın indeksini alırız.
Ve bu listeler OOP içindeki bir şeye mi bağlı? Yani, yanlarında ne tür bir "yük" çekiyorlar? Sınıflar, yapıcılar, arayüzler...? Sınıf ortamına entegre olmuşlar, değil mi?
 
Nikolai Semko :
Bir sınıf nesnesi oluştururken, sınıfın tüm özellikleri (değişkenleri) için bellek ayırmaya ek olarak , yapıcılardan biri başlatılır (birden fazla olabilir). Yapıcılar parametresiz (varsayılan olarak), parametrik (bir sınıfın örneğini oluştururken bazı parametreler belirtildiğinde veya sınıfın başka bir örneği bir sınıf örneğinin parametresi olarak belirtildiğinde bir kopya oluşturucu) olabilir.
Apaçık. Nikolay'a teşekkürler. Bileceğim.
 
Реter Konow :

Bu sorunu zaten herkese açık olarak çözdüm. Sonuç olarak, tüm sembollerin ve tüm zaman çerçevelerinin bir tablosu oluşturulur ve bunun üzerinden bir döngü içinde yeni bir çubuğun olayları kaydedilir. Bu olayın herhangi bir fonksiyonunun ilk isteğinden sonra bayrağı tablodan silinir. OOP'den ne kadar zor - yargılamayı düşünmüyorum. Ama aslında oldukça basit ve kullanışlı bir çözüm.

yukarda yazdığınız gibi herşey göreceli.... klipte son çekimi kullanıyorum...

MT'nin tesliminden itibaren standart kitaplığa baktınız mı? orada her şey OOP tarzında, 2 seçenek var veya Metaquot programcıları profesyoneller ve anlaşılır stiller kullanıyorlar veya ... Seçeneğiniz;)

 
Igor Makanu :

yukarda yazdığınız gibi herşey göreceli.... klipte son çekimi kullanıyorum...

MT'nin tesliminden itibaren standart kitaplığa baktınız mı? orada her şey OOP tarzında, 2 seçenek var veya Metaquot programcıları profesyoneller ve anlaşılır stiller kullanıyorlar veya ... Sizin seçeneğiniz ;)

OOP hakkında henüz pek bir şey bilmiyorum. Bana listelerden bahsediyorlar ama neyle "yediklerini" bilmiyorum. Nasıl bildirilirler, nasıl erişilirler, nasıl değiştirilirler vb... Benim için bir liste, herhangi bir ek olmadan sadece dinamik bir dizidir. sözdizimi. Bir nesne, bir dizideki bir dizi özelliktir. OOP'de bir Object bir bütün sınıftır. Kalıtım - nesnelerin bağlantısı. Adlandırılmış başvurular aracılığıyla nesne özelliklerine erişme. Onun yöntemleri gibi. Genel olarak, benim için her şey çok daha basit ve bu nedenle olasılıkları ve etkinliği karşılaştırmak benim için hala zor. Daha derine inmeniz gerekiyor.

Ama bir şeyi anladım. OOP'nin tamamını anlamadan ve ona tamamen geçmeden OOP kavramından herhangi bir özü anlamak ve kullanmak imkansızdır. Ya OOP ya da ne istersen. Sadece uygun mekanizmalarından birini kullanmak belki de işe yaramaz.

 
Реter Konow :

Sadece uygun mekanizmalarından birini kullanmak belki de işe yaramaz.

OOP'nin prosedürel stiliyle sorunsuz bir şekilde bir arada bulunur, ancak işlevler tamamen ayrı ve bağımsız bir kod bloğu yürütülmelidir, yani. işlevin kullandığı her şey içinde olmalı veya ona parametre olarak iletilmelidir.

genel olarak, Wiki'de yazdıkları gibi, OOP prosedürel stilin bir devamıdır

Peter Konow'un fotoğrafı.

Ama bir şeyi anladım. OOP'nin tamamını anlamadan ve tamamen ona geçmeden OOP kavramından herhangi bir özü anlamak ve kullanmak imkansızdır.

yapabilirsiniz, bir örnek verdim ve forumda, OOP stilindeki kaynakların yüzde 90'ı prosedürel stilin etrafındaki sarmalayıcılardır - kalıtım yok, soyutlama yok, hayır ..... hiçbir şey, sadece kapsülleme, ama yine de en az kullanışlı - başka bir görev için tamamen taşınabilir bir kod parçasına sahip olmak uygun - sonuçta her şey bir sınıfın içinde mi? ;)

 
Igor Makanu :

OOP'nin prosedürel stili ile sorunsuz bir şekilde bir arada bulunur, ancak işlevler tamamen ayrı ve bağımsız bir kod bloğu yürütülmelidir, yani. işlevin kullandığı her şey içinde olmalı veya ona parametre olarak iletilmelidir.

genel olarak, Wiki'de yazdıkları gibi, OOP prosedürel stilin bir devamıdır

yapabilirsiniz, bir örnek verdim ve forumda, OOP tarzı kaynakların yüzde 90'ı prosedürel stilin etrafındaki sarmalayıcılardır - miras yok, soyutlama yok, hayır ..... hiçbir şey, sadece kapsülleme, ama yine de en azından uygun - başka bir görev için tamamen taşınabilir bir kod parçasına sahip olmak uygun - sonuçta her şey bir sınıfın içinde mi? ;)

Evet, kod taşınabilirliği OOP için büyük bir artı. Benim durumumda, yalnızca bireysel işlevler taşınabilir (ve daha sonra nadir durumlarda), ancak büyük bir mekanizma kurduğumda artık hiçbir şey taşınabilir değildir. İnsan organları ne kadar dayanılmazdır (profesyonel müdahale olmadan). Mekanizmalarım, her biri birçok görevi yerine getiren büyük bloklara ayrılmaları anlamında daha çok "organizmalar" gibidir. Bu nedenle, taşınabilirlik neredeyse yoktur. AMA, öte yandan, bu bloklar işlevselliklerini çok kolay bir şekilde artırır. Sadece birkaç satırda "artırılır" ve işte! - bloklar, birçok ayrı işlev yazmanın gerekli olacağı bir dizi yeni çalışma gerçekleştirir. Genel olarak, artılar var. Küresel kapsam inanılmaz derecede güçlü bir araçtır. Blokların çalıştığı malzeme kesinlikle ellerindedir ve hiçbir şeyin aktarılmasına gerek yoktur. Çalışmak için ihtiyacınız olan her şey zaten var. Genel olarak, yaklaşımlar farklıdır ve her birinin kendi avantajları vardır.

 
Реter Konow :

OOP hakkında henüz pek bir şey bilmiyorum. Bana listelerden bahsediyorlar ama neyle "yediklerini" bilmiyorum. Nasıl bildirilirler, nasıl erişilirler, nasıl değiştirilirler vb... Benim için bir liste, herhangi bir ek olmadan sadece dinamik bir dizidir. sözdizimi. Bir nesne, bir dizideki bir dizi özelliktir. OOP'de bir Object bir bütün sınıftır. Kalıtım - nesnelerin bağlantısı. Adlandırılmış başvurular aracılığıyla nesne özelliklerine erişme. Onun yöntemleri gibi. Genel olarak, benim için her şey çok daha basit ve bu nedenle olasılıkları ve etkinliği karşılaştırmak benim için hala zor. Daha derine inmeniz gerekiyor.

Ama bir şeyi anladım. OOP'nin tamamını anlamadan ve ona tamamen geçmeden OOP kavramından herhangi bir özü anlamak ve kullanmak imkansızdır. Ya OOP ya da ne istersen. Sadece uygun mekanizmalarından birini kullanmak belki de işe yaramaz.

Peter, sadece denemelisin. Ve liste yapılarında denemenizi tavsiye ederim, çünkü OOP'nin tüm avantajlarını her üç yönde de görebilirsiniz - kalıtımda, kapsüllemede ve polimorfizmde.

Kalıtım nedeniyle, liste içindeki nesnelerle çalışmak için tek bir arabiriminiz (bir dizi sanal işlev ) vardır. Nesneler, temel nesnelerden miras alınan basit veya karmaşık olabilir.

Polimorfizm nedeniyle, bu tek arabirimi kullanarak temelde farklı nesnelerle çalışabilirsiniz.

Kapsülleme nedeniyle - SADECE bu arayüze sahipsiniz ve herhangi bir uygulama inceliğine erişiminiz yok - buna göre hiçbir şeyi bozamazsınız. Ayrıca, yalnızca şu anda var olan nesnelerin nasıl çalıştığını değil, aynı zamanda henüz yazılmamış nesnelerin kodunuzla nasıl etkileşime gireceğini de kesin olarak biliyorsunuz.

 
Реter Konow :
Ve bu listeler OOP içindeki bir şeye mi bağlı? Yani, yanlarında ne tür bir "yük" çekiyorlar? Sınıflar, yapıcılar, arayüzler...? Sınıf ortamına entegre olmuşlar, değil mi?
Aslında - liste diziye çok yakın. Bunu bir liste tipi değişken olarak bildirebilir veya new operatörünü kullanarak yeni bir tane oluşturabilirsiniz. Ancak yeni olması durumunda, liste terminal alt sistemi tarafından kontrol edilmez ve işin sonunda silinmesi gerekir - sil. Ancak böyle bir liste başka bir listeye nesne olarak eklenirse, onu takip etmeye gerek yoktur.
 
Реter Konow :

Küresel kapsam inanılmaz derecede güçlü bir araçtır. Blokların çalıştığı malzeme kesinlikle ellerindedir ve hiçbir şeyin aktarılmasına gerek yoktur. Çalışmak için ihtiyacınız olan her şey zaten var.

eğer fonksiyonların veya kod bölümlerinin parametreleri olarak kullanılacak değişkenlerin global kapsamından bahsediyorsak, o zaman .... IMHO bu, mümkün olmayan gizli hataları alma yeteneği ile kesinlikle taşınabilir olmayan kod almanın en iyi yoludur. gelecekte tespit etmek

Not: Bu tür danışman kodlarını MT4 altında birçok kez değiştirdim, ilk başta global olarak bildirilen değişkenleri yeniden adlandırdım - sonra derleyici hatalarının nerede değişiklik yaptığını, en son tükürdüğümde ve gerektiği gibi yaptım - işleve yeni parametreler ekledim imzalar ve ardından global olarak tanımlanan değişkenleri kaldırdı, çünkü böyle başladı, ya böyle bir dağ kodunu bir kez değiştirmeyi başarırsanız, ikinci bir çağrı için bekleyin ve tekrar baştan? - ne yazık ki tembelim ama oldukça tembelim)))))

 
Igor Makanu :

eğer fonksiyonların veya kod bölümlerinin parametreleri olarak kullanılacak değişkenlerin global kapsamından bahsediyorsak, o zaman .... IMHO bu, mümkün olmayan gizli hataları alma yeteneği ile kesinlikle taşınabilir olmayan kod almanın en iyi yoludur. gelecekte tespit etmek

Not: Bu tür danışman kodlarını MT4 altında birçok kez değiştirdim, ilk başta global olarak bildirilen değişkenleri yeniden adlandırdım - sonra derleyici hatalarının nerede değişiklik yaptığını, en son tükürdüğümde ve gerektiği gibi yaptım - işleve yeni parametreler ekledim imzalar ve ardından global olarak tanımlanan değişkenleri kaldırdı, çünkü böyle başladı, ya böyle bir dağ kodunu bir kez değiştirmeyi başarırsanız, ikinci bir çağrı için bekleyin ve tekrar baştan? - ne yazık ki tembelim ama oldukça tembelim)))))

Kod taşınabilir değil, özelliği bu. Taşınabilir olması amaçlanmamıştır. Başka bir amacı var. Değişkenlerin küresel kapsamı, karmaşık mekanizmaların çalışması için güçlü bir araçtır. Sadece nasıl kullanılacağını bilmeniz gerekiyor. Ve bana bazı gizli hatalardan ve buglardan bahsettiklerinde kayboluyorum. Değişkenlerin küresel görünürlüğü ile ilgili hiçbir zaman hatam olmadı. Hiç kelimeden.

Neden: