OOP uzmanları için soru. - sayfa 24

 

Her neyse, OOP "Nesne" de ne var bana ulaşmıyor.

"Bir nesne bir sınıfın örneğidir" diyor. Bir sınıfın birden çok örneği olabilir. Ancak bu örnekler yalnızca sınıf referanslarıdır. Sınıf alanlar içerir. Alanlar bir nesnenin özellikleridir . Yöntemler, bir nesnenin belirli özelliklerinin değerlerini işleyen motorun öğeleridir.

Anladığım kadarıyla, bir nesne adlandırılmış (veya numaralandırılmış) bir özellik kümesidir. Özellik değerleri, çeşitli büyük blok mekanizmaları tarafından işlenir. Temelde, aynı şey. Sadece farklı yazılmış. OOP'de, kapsülleme uğruna işlevsellik bölünür. Bana - aksine - bir işlevsellik konsolidasyonu.

Soruyu grafik alanına çevirirsek, "CButton" sınıfı benim Button öğem ile aynıdır. Benim uygulamamda, bunlar çekirdekte her biri bir dizi özellik olan üç nesnedir. Sınıfta, bu aynı zamanda özellikler (alanlar), düğme yöntemlerinin bir listesidir (ayrı ayrı düğmelere ait yöntemlerim yok. Düğmenin işlevselliği global işlev bloklarının içinde bulunur). Bu bloklarda, düğme herhangi bir öğe gibi ele alınır, ancak belirli yerlerde kendi koşulları ve işleyicileri vardır. OOP'de, aynı düğme işlevi yalnızca örnekler aracılığıyla erişilebilen bir sınıfta kapsüllenir.

 
Реter Konow :

George, her kütüphanede, her çözümde bir çeşit konsept vardır. Başka birinin konseptini alıp ona göre kendi konseptimi geliştirmeye çalışırsam, kavramsal bir çöküş yaşayabilirim çünkü iki veya daha fazla konsept üzerine kurulmuş bir sistem istikrarlı olamaz. Bu nedenle, yenilikçi şeylerin kendiniz ve sıfırdan geliştirilmesi gerekir. Diğer yazarların "genel" hataları ve çelişkileriyle uğraşmamak için.

Peter, boş yere tartışıyorsun. Bir şey kanıtlamak imkansız. Ayrıca, _Symbol kullanmak yerine CSymbolInfo kitaplığını bağlamayı ve bir object.Name() yazmayı önerdiklerinde bu programlama yaklaşımını anlamıyorum.

Bu tür SB yöntemlerinin kullanımını anlamıyorum, örneğin

 //+------------------------------------------------------------------+
//| Set the property value "SYMBOL_SELECT"                           |
//+------------------------------------------------------------------+
bool CSymbolInfo::Select( const bool select )
  {
   return (SymbolSelect(m_name, select ));
  }

yazmak ne kadar zor

 SymbolSelect ( "Нужный символ" , включить или выключить );

Her iki durumda da, yalnızca bir kod satırı vardır.

Öte yandan Artyom, içinde kaybolduğum, hiçbir şey anlamadığım ve kullanmadığım OOP'nin olanaklarını bana gösterdi.

 
Petros Shatakhtsyan :

Çok değil.

Burada farklı bir şekilde açıklayacağım. Genelde kimse bunu bu şekilde açıklamaz.

Tüm programcılar ne olduğunu bilir, örneğin int x ;

Şimdi int kelimesinin bir sınıf adı gibi olduğunu hayal edin. Neyi tarif ediyor? bu nedir:

1. tam sayı

2. bellekte 4 bayt yer kaplar

3. + - değerlerini belli sınırlar içinde alır. (bu kadarı yeter);

Ve int x yazdığımızda; sonra int türünde bir x nesnesi bildiririz. x zaten fiziksel olarak RAM'de 4 baytlık bir alanı kaplar.

Teşekkür ederim. Bu durumda, bir sınıf, diğer sınıf nesneleriyle hiyerarşik bir ilişki içinde, esasen kendi içinde bir Nesne olan, kapsüllenmiş bir varlıktır, bir kapsayıcıdır. Bir sınıf, varlığını, diğer nesnelerin işlevselliğinden ayrılan özellikler (alanlar) ve yöntemler (kapsüllenmiş işlevsellik) aracılığıyla tanımlar.
 
Alexey Viktorov :

Peter, boş yere tartışıyorsun. Bir şey kanıtlamak imkansız. Ayrıca, _Symbol kullanmak yerine CSymbolInfo kitaplığını bağlamayı ve bir object.Name() yazmayı önerdiklerinde bu programlama yaklaşımını anlamıyorum.

Örneğin, bu tür SB yöntemlerinin kullanımını anlamıyorum.

yazmak ne kadar zor

Her iki durumda da, yalnızca bir kod satırı vardır.

Öte yandan Artyom, içinde kaybolduğum, hiçbir şey anlamadığım ve kullanmadığım OOP'nin olanaklarını bana gösterdi.

Hiçbir şey.)) Konseptimle farklılıkları ve benzerlikleri bulmak için OOP kavramını anlamaya çalışıyorum. Bilgimi zenginleştireceğini düşünüyorum.))
 
Реter Konow :
Anlamın bu versiyonunda Sınıf, alet, malzeme, hammadde ve makine aletleri deposudur. Miras alınan sınıfların hiyerarşisi - "fabrika" nın dükkanları gibi.

Peter, neden böyle inceliklere giriyorsun?

Sınıf, bir nesnenin tanımı , özellikleri ve bu özellikleri ayarlamak ve bunlara erişmek için kullanılan yöntemlerdir.

Bir nesne, bir sınıf türüyle bir değişken tanımladığımızda veya new operatörüyle bu sınıftan yeni bir nesne oluşturduğumuzda.

Örneğin, bu sınıf:

 //+------------------------------------------------------------------+
class CClass
  {
//--- Приватные члены класса. Доступны только в объекте этого класса
private :
   int                m_type;   // Тип объекта

//--- Защищённые члены класса. Доступны в объекте этого класса и его наследниках
protected :
   string             m_name;   // Имя объекта

//--- Публичные члены класса. Доступны везде
public :
   void               SetType( const int type)          { this .m_type=type;     }
   int                GetType( void )               const { return this .m_type;   }
   void               SetName( const string name)       { this .m_name=name;     }
   string             GetName( void )               const { return this .m_name;   }
  };
//+------------------------------------------------------------------+

Sınıfın yalnızca iki üyesi vardır - tür ve ad. Bunlar onun özellikleri. Ve bu bir nesne değil. Bu, gelecekteki bir nesnenin planı, çizimi, projesidir.

Bir nesne oluşturuyoruz:

CClass   class_obj;                 // Объявили переменную class_obj с типом класса CClass. Теперь class_obj - это объект

Bir nesne ve ona bir işaretçi oluşturun:

CClass  *class_ptr = new CClass();   // Оператором new создали новый объект класса CClass, и в переменную class_ptr получили на него указатель. 
                                     // Теперь в памяти сидит объект CClass, и получить к нему доступ можно по этому указателю, 
                                     // и по этому же указателю обязательно удалить объект по завершении работы оператором delete
 
Dediğim gibi, OOP'de Nesnenin görüşü benim konseptimden daha geniştir. Yalnızca tek tip özelliklere sahip grafik nesnelerle ilgilendim. OOP, bir Nesne kavramı aracılığıyla herhangi bir varlığın bir görünümünü sunar. Bu elbette harika, çünkü herhangi bir varlık bir Nesnedir. Tabii ki, nesnelerin işlevselliğinin aşırı kapsüllenmesine ve parçalanmasına karşıyım. Niye ya? Evet, çünkü mekanizmaları daha az verimli hale getiriyor. Ancak, Nesneye daha geniş bir bağlamda bakma olasılığı beni cezbediyor.
 
Реter Konow :

George, her kütüphanede, her çözümde bir çeşit konsept vardır. Başka birinin konseptini alıp ona göre kendi konseptimi geliştirmeye çalışırsam, kavramsal bir çöküş yaşayabilirim çünkü iki veya daha fazla konsept üzerine kurulmuş bir sistem istikrarlı olamaz. Bu nedenle, yenilikçi şeylerin kendiniz ve sıfırdan geliştirilmesi gerekir. Diğer yazarların "genel" hataları ve çelişkileriyle uğraşmamak için.

Sadece yedi (!) not var. Onlarda ne kadar müzik var? Ve tek bir besteci çöküşü düşünmüyor. Sadece ruhta çalan müzikler yazıyor. Başka bir şey icat etmez, bu yedi notayı kullanır.

 
Artyom Trishkin :

Peter, neden böyle inceliklere giriyorsun?

Sınıf, bir nesnenin tanımı , özellikleri ve bu özellikleri ayarlamak ve bunlara erişmek için kullanılan yöntemlerdir.

Bir nesne, bir sınıf türüyle bir değişken tanımladığımızda veya new operatörüyle bu sınıftan yeni bir nesne oluşturduğumuzda.

Örneğin, bu sınıf:

Sınıfın yalnızca iki üyesi vardır - tür ve ad. Bunlar onun özellikleri. Ve bu bir nesne değil. Bu, gelecekteki bir nesnenin planı, çizimi, projesidir.

Bir nesne oluşturuyoruz:

Bir nesne ve ona bir işaretçi oluşturun:

Sınıf, bir nesnenin açıklamasıdır. İyi. Bir nesnenin özelliklerini ve işlevselliğini içerir. TAMAM. Bütün bunlar emredilir, açılır veya korunur.

O zaman NESNE KENDİSİ perde arkasındadır. Sınıf bağlamındadır. Adı ve açıklaması bağlamında. Yani, OOP'de bir Nesne, adlandırılmış bir nitelikler kompleksidir (yalnızca özellikler değil, aynı zamanda işlevsel öğeler - yöntemler), ancak benimkinden daha düzenli ve kapsüllüdür. (Bu benim için daha net hale getiriyor.)

 
Alexey Viktorov :

Bu tür SB yöntemlerinin kullanımını anlamıyorum, örneğin

yazmak ne kadar zor

OOP kavramının kendisi sadece yazmamayı ima eder - yöntemin uygulamasını bilmenize gerek yoktur (örneğinizde, return(SymbolSelect(m_name,select)))

bu satır yerine şunu hayal edin:

 SymbolSelect ( "Нужный символ" , включить или выключить);

çok sayıda istek, çeşitli kontroller vb. gerçekleştirmeniz gerekiyor. - kendi kütüphanenizi yazmanız ve materyalin kendisini incelemeniz zaman alacaktır

Görevinizin yalnızca bir sınıf biçiminde hazır bir çözümün yöntemini kullanmaya başlamasına izin verin - sınıfın (nesnenin) bir örneğini oluşturursunuz ve hazır Select (const bool select) yöntemini kullanırsınız

Daha fazla bu tür işlemlerin yapılması gerekmiyorsa, boş hafıza = nesneyi yok et

Göreviniz, piyasa saatinde sembolü etkinleştirdiğiniz / devre dışı bıraktığınız bir düğmeye basarak bir düğmeyi görüntülemeye indirgensin ---> kendi sınıfınızı oluşturun ve hazır düğme sınıfını ve hazır CSymbolInfo sınıfını içine alın - tüm görev çözüldü

OOP paradigması, yalnızca sınıfla neler yapabileceğiniz hakkında genel bilgi verir - CSymbolInfo'yu kapsüllemek istemiyorsanız - peki, sınıfınızı ondan alın


Not: "parmaklarda" ise , OOP'nin özü , uygulamayı bilmeden göreve hızlı bir çözümdür

 
Реter Konow :

Sınıf, bir nesnenin açıklamasıdır. İyi. Bir nesnenin özelliklerini ve işlevselliğini içerir. TAMAM. Bütün bunlar emredilir, açılır veya korunur.

O zaman NESNE KENDİSİ perde arkasındadır. Sınıf bağlamındadır. Adı ve açıklaması bağlamında. Yani, OOP'de bir Nesne, adlandırılmış bir nitelikler kompleksidir (yalnızca özellikler değil, aynı zamanda işlevsel öğeler - yöntemler), ancak benimkinden daha düzenli ve kapsüllüdür. (Bu benim için daha net hale getiriyor.)

Her şeyi anlamak için kitap okumak gerekir. 21 günde en az VC++.

MFC'yi ilk kez kullanmanızı, CDialog tabanlı bir windows uygulaması oluşturmanızı, her türlü nesneyi oluşturmanızı ve ne kadar kolay yönetildiğini görmenizi tavsiye ederim.

Ondan sonra fikrinizi çöpe atacaksınız. Ne yazık ki.