OOP uzmanları için soru. - sayfa 16

 
Georgiy Merts :

Burada, bu işlev hakkında daha ayrıntılı olarak. Elinizde on gerekli işlevden birini seçen canavarca boyut anahtarı var. Böyle bir anahtarda, yanlışlıkla şubelerden biri ile ilgili kodu yanlış yere yazarak hata yapmak çok kolaydır.

Aşırı yük ile - her şey çok daha kolay. On farklı torunumuz var ve her seferinde BİR sınıfla çalışıyoruz ve aşırı yüklenmiş BİR işlevi var. Yanlışlıkla farklı bir sınıfa yazamayız çünkü bu tamamen farklı bir dosyanın açılmasını gerektirir.

Artı - bu çok büyük geçişte denemenin kendisi - bence, gerekli bir sınıfı açmaktan çok daha stresli ve ardından sadece bir işlevle deneme.

Aslında, montajcı kodunda, tüm bu aşırı yüklenme, bu işaretçiye bağlı olarak her durumda aynı anahtara gelir. Ancak OOP durumunda, tüm bunlar programcıdan gizlenir ve çalışmasına müdahale etmez. OOP olmadan - bununla başa çıkmak zorundasınız.

Kabaca söylemek gerekirse, yürürken kaslarınıza belirli bir sırayla onları hareket ettiren sinyaller gönderirsiniz. Ancak, bilinç düzeyinde - sadece hangi hareketi yapmanız gerektiğini hatırlarsınız. Burada, OOP tam da böyle bir "hafıza, hangi hareketin yapılması gerekiyor". "Onlara bağlı bir sürü kas ve sinirimiz varsa, hareketi neden hatırladığınızı anlamıyorsunuz." Şey... Hafızanın devleri için zaten birçok kez söyledim ve gerçekten, yürümek için hangi kasları hangi sırayla zorlamanız gerektiğini hatırlamak oldukça yeterli. Bu hareketi bir bütün olarak hatırlamanın bir anlamı yok - hayır, hayır. Çok fazla hatırlayamayan geri kalanı için, tüm hareketi bir bütün olarak hatırlamak çok daha makul, ancak kaslarda ne var, hangi sırayla gerginler ve ne kadar - onu gizlemek daha makul. bilinç.

Evet George, argümanların makul ve mantıklı. Aslında benim yaklaşımım programınızdaki her şeyi hatırlamanızı ve bilmenizi gerektiriyor. Bu hem iyi hemde kötü. İyi, çünkü bilgi, kodun ve çözümlerin hızlı bir şekilde geliştirilmesini, az sözdizimi ve çok sayıda işlevsellik sağlar, ancak kötü, çünkü kodun bölümleri, tüm blokların küresel ara bağlantısı nedeniyle diğer programlara aktarılmaz.

Sonuçta konuşma dilimiz de küresel hafızayı kullanır. Sadece mevcut konuşma konusuna ait olanları değil, tüm kelimeleri biliyoruz ve hatırlıyoruz. Kafamızda her şey birbirine karışıyor. Mind böyle çalışır ve benim yaklaşımım da böyle çalışır. Fonksiyon bloklarının tüm önemli çıkışları evrensel olarak mevcuttur. Ve bu nedenle, içlerinde neredeyse insan terminolojisi var. Normal bir dil gibi kodla konuşuyorum. Çok rahat. Ancak hatırlanacak çok şey var. Bu doğru.


not. Bu arada, dev bir anahtar dosyalara bölünebilir ve içeriği gizleyebilir. Her şeyi bütünüyle görmek benim için uygun.

 
Vict :

Tin, genel kabul görmüş yaklaşımı uygun şekilde incelemeden bir tür bisiklet inşa ediyor. Piotr, iyi bir kitap bul, belki Stroustrup, bir metin editörü yazdığı bir kitapta, gerçek bir problem üzerine bir şeyler çizebilirsin, içeriğini hatırlamıyorum, ama kötü şeyler öğretmesi pek mümkün değil.

Tabii ki teşekkür ederim. Ancak son 6 yılda sayısız görevi çözdüğüm için belirli görevlerin gözlerimi bir şeye açması pek olası değil. Gerçekten hesaplanamaz. Bu nedenle, neden bahsettiğimi biliyorum.
 
Ve şimdi verimliliğe. Anahtar - sonunda ne var? Bu, bir parametrenin sabitlerle sıralı bir karşılaştırmasıdır. Dikkat Peter, tutarlı. Yani istenilen sabit 100500. ise tüm bu karşılaştırmalar işlemci üzerinde yapılacaktır. Makine kodunda aşırı yüklenmiş işlevler/yöntemler nelerdir, derlemeden sonra bunlar kendi giriş noktalarına sahip tamamen farklı kod bloklarıdır. Peki hangisi daha verimli?
 
Реter Konow :
Tabii ki teşekkür ederim. Ancak son 6 yılda sayısız görevi çözdüğüm için belirli görevlerin gözlerimi bir şeye açması pek olası değil. Gerçekten hesaplanamaz. Bu nedenle, neden bahsettiğimi biliyorum.

Pek çok görev var, ancak yine de aşırı yüklenmenin faydasını anlamadılar. İşlevin şablonlu olduğunu, int, double veya kullanıcı tanımlı bir türün argümanlardan geçebileceğini ve mutlak değeri abs() aracılığıyla bulmak istediğimizi, nasıl aşırı yüklemeden?

Proje büyüdükçe bu dizilerin etrafındaki koltuk değneklerinize bakardım: bir araba tekerleği -> 4 tekerlekli sandalyeli bir araba -> yüz arabalık bir yol modelliyoruz.

 
Vladimir Simakov :
Ve şimdi verimliliğe. Anahtar - sonunda ne var? Bu, bir parametrenin sabitlerle sıralı bir karşılaştırmasıdır. Dikkat Peter, tutarlı.

Hayır, anahtar farklı çalışır. Bu, geçişin hemen istenen sabite gerçekleştirildiği bir tablodur. Bu, if bloğundan temel farkıdır.

 
Vladimir Simakov :
Ve şimdi verimliliğe. Anahtar - sonunda ne var? Bu, bir parametrenin sabitlerle sıralı bir karşılaştırmasıdır. Dikkat Peter, tutarlı. Yani istenilen sabit 100500. ise tüm bu karşılaştırmalar işlemci üzerinde yapılacaktır. Makine kodunda aşırı yüklenmiş işlevler/yöntemler nelerdir, derlemeden sonra bunlar kendi giriş noktalarına sahip tamamen farklı kod bloklarıdır. Peki hangisi daha verimli?

Ne yazık ki, kaçınılmaz yük. Bunda kaybederim, diğerinde kazanırım.

Örneğin: Dev bir anahtarla aynı işlev, öğelerdeki nesnelerin ve pencerelerdeki öğelerin konumlarını düzenler. Boyutlarını hesaplar. Bir kere çağırırım ve tüm elementler ve tüm nesneler bağlantılarına göre konumlarına yerleştirilir. Boyutları ve birbirlerine göre konumları hesaplanır. Hangi öğelerin gizleneceğine, hangi tuval boyutunun gerekli olduğuna vb. karar vermek... Bir çağrı çok iştir. Aynı blok, binde bir pencere öğesinin boyutlarını veya konumlarını hesaplayabilir. Bir blok. Çağrı - Nesne();

Bu kadar çok sorunu çözmek için OOP'de kaç sınıf ve işlev yazmam gerekir? hayal etmekten korkuyorum.

 
Реter Konow :

Ne yazık ki, kaçınılmaz yük. Bunda kaybederim, diğerinde kazanırım.

Örneğin: Dev bir anahtarla aynı işlev, öğelerdeki nesnelerin ve pencerelerdeki öğelerin konumlarını düzenler. Bir kere çağırırım ve tüm elementler ve tüm nesneler bağlantılarına göre konumlarına yerleştirilir. Boyutları ve konumları hesaplanır. Hangi öğelerin gizleneceğine, hangi tuval boyutunun gerekli olduğuna vb. karar vermek... Bir çağrı çok iştir. Aynı blok, binde bir pencere öğesinin boyutlarını veya konumlarını hesaplayabilir. Bir blok.

Bu kadar çok sorunu çözmek için OOP'de kaç sınıf ve işlev yazmam gerekir? hayal etmekten korkuyorum.

Parçalar 5-10, yani hazırlıksız. Kesinlikle net bir arayüz ile.
 
Ders sayısından bahsediyorum. Her satır 200'dür.
 
Ihor Herasko :

Hayır, anahtar farklı çalışır. Bu, geçişin hemen istenen sabite gerçekleştirildiği bir tablodur. Bu, if bloğundan temel farkıdır.

Evet kesinlikle. Yani hız açısından, bu açıkça MQL'deki en hızlı seçenektir. Ancak yönetilen bir ortamda sınıf nesnelerine erişim dolaylı olarak gerçekleşir.
 
Реter Konow :

Parametresiz bir fonksiyon yapıyoruz, aşırı yüklenmiş fonksiyonların tüm hesaplamalarını içimize yazıyoruz, değişkenleri global hale getiriyoruz ve diğer herhangi bir fonksiyondan sonuçlara erişebiliyoruz. Bu bir güzellik!

Evet, düz gaf ... "Mizah" dalında bu gereklidir)