Alım-satım fırsatlarını kaçırıyorsunuz:
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Kayıt
Giriş yap
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz
Hesabınız yoksa, lütfen kaydolun
7 Dakikada Nesne Yönelimli Programlama | Muş
7 Dakikada Nesne Yönelimli Programlama | Muş
Nesne yönelimli programlama (OOP), dört temel kavramı sunarak yazılım geliştirme yaklaşımımızda devrim yarattı: kapsülleme, soyutlama, kalıtım ve çok biçimlilik. Bu kavramlar, karmaşık sistemleri tasarlamak ve uygulamak için güçlü ve organize bir çerçeve sağlar.
Kapsülleme, ilgili değişkenleri ve işlevleri nesne adı verilen bir birimde bir araya getirme uygulamasıdır. Verileri ve bu veriler üzerinde çalışan yöntemleri bir nesne içinde kapsülleyerek, iyi tanımlanmış sınırları olan bağımsız bir varlık yaratırız. Örneğin, bir araba nesnesi marka, model ve renk gibi özelliklerin yanı sıra başlat, durdur ve taşı gibi yöntemlere sahip olabilir. Bu kapsülleme, iç uygulama ayrıntılarını dış dünyadan gizleyerek, araba nesnesini tek bir varlık olarak manipüle etmemize ve onunla etkileşim kurmamıza olanak tanır. Kapsülleme yalnızca kod organizasyonunu iyileştirmekle kalmaz, aynı zamanda kodun yeniden kullanılabilirliğini ve sürdürülebilirliğini de geliştirir.
Soyutlama, karmaşık uygulama ayrıntılarını gizleme ve yalnızca temel özellikleri veya arabirimleri açığa çıkarma işlemidir. Gerçek dünyadaki nesnelerin veya kavramların basitleştirilmiş temsillerini oluşturmamıza izin verir. Tıpkı bir DVD oynatıcının karmaşık iç mantığını birkaç düğmenin arkasına soyutlaması gibi, OOP'deki nesneler de net ve özlü bir arayüz sağlarken kendi iç işleyişini gizleyebilir. Karmaşıklığı soyutlayarak bilişsel yükü azaltabilir ve kodumuzu daha anlaşılır hale getirebiliriz. Ayrıca soyutlama, bir nesne içindeki değişikliklerin etkisini izole ederek ve kod tabanının diğer bölümlerinde istenmeyen sonuçları önleyerek koruyucu bir kalkan görevi görür.
Kalıtım, nesnelerin özellikleri ve davranışları diğer nesnelerden devralmasını sağlayan bir mekanizmadır. Kalıtımla, daha özel nesnelerin daha genelleştirilmiş nesnelerden özellikleri devraldığı bir nesneler hiyerarşisi oluşturabiliriz. Bu hiyerarşi, ortak öznitelikler ve yöntemler bir temel nesnede tanımlanabileceği ve alt sınıfları tarafından miras alınabileceği için kodun yeniden kullanımını teşvik eder. Örneğin, metin kutuları, açılır listeler ve onay kutuları gibi HTML öğeleri söz konusu olduğunda, bunların tümü, gizli ve dahili HTML gibi ortak özelliklerin yanı sıra tıklama ve odaklama gibi yöntemleri paylaşır. Bu özellikleri ve yöntemleri her HTML öğesinde çoğaltmak yerine, bunları HTML öğesi adı verilen genel bir nesnede bir kez tanımlayabilir ve belirli öğelerin ondan miras almasını sağlayabiliriz. Kalıtım, fazlalığı ortadan kaldırır, kod bakımını geliştirir ve esnek ve genişletilebilir kod mimarilerine izin verir.
Yunanca "poli" (birçok) ve "morf" (biçim) sözcüklerinden türetilen polimorfizm, nesnelerin birden fazla biçim veya davranış alma yeteneğini ifade eder. OOP'de polimorfizm, farklı türdeki nesnelerin ortak türdeki nesneler gibi ele alınmasına izin verir. Bu kavram, yöntem geçersiz kılma ve yöntem aşırı yükleme yoluyla elde edilir. Yöntem geçersiz kılma, bir alt sınıfın, üst sınıfından miras alınan bir yöntemin kendi uygulamasını sağlamasına olanak tanır. Örneğin, bir sayfada farklı HTML öğelerinin oluşturulması gerekebilir, ancak her öğenin kendine özgü oluşturma davranışı vardır. Her nesnede bir işleme yöntemi uygulayarak, polimorfizm elde edebilir ve uzun if-else veya switch-case ifadelerini ortadan kaldırarak kodu basitleştirebiliriz. Yöntem aşırı yükleme ise, aynı ada ancak farklı parametre listelerine sahip birden çok yöntemin bir sınıf içinde bir arada bulunmasına izin verir. Polimorfizm, kod esnekliği sağlar, kodun okunabilirliğini artırır ve belirli bir uygulama yerine "bir arabirime programlama" ilkesini destekler.
Kapsülleme, soyutlama, kalıtım ve polimorfizmden yararlanan nesne yönelimli programlama, yazılım geliştirmeye yapılandırılmış bir yaklaşım sağlar. Kod organizasyonu, yeniden kullanılabilirlik, sürdürülebilirlik, modülerlik ve genişletilebilirlik gibi sayısız fayda sağlar. Bu temel kavramları anlamak ve etkili bir şekilde uygulamak, geliştiricilerin esnek, ölçeklenebilir ve zaman içinde anlaşılması ve bakımı daha kolay olan karmaşık sistemler oluşturmasını sağlar.
Nesne Yönelimli Programlamaya Giriş - Hızlandırılmış Kurs
Nesne Yönelimli Programlamaya Giriş - Hızlandırılmış Kurs
Nesne yönelimli programlamaya giriş bölümüne hoş geldiniz. Bu derste, nesne yönelimli programlama kavramını ve onun dört ana ilkesini keşfedeceğiz. Önceden programlama bilgisine sahip olduğunuz varsayılır, ancak programlamada yeniyseniz, açıklamada bağlantısı verilen programlamaya giriş videomuzu izlemenizi öneririz.
Nesne yönelimli programlama, benzer türdeki değişkenleri bir arada gruplandırmamıza izin vererek karmaşık programları yönetmeyi kolaylaştırır. Geçmişte, tek basit değerleri depolamak için byte, int, float, double, boolean ve char gibi ilkel veri türleri kullanılıyordu. Bununla birlikte, programlar daha karmaşık hale geldikçe, programcıların ilgili değişkenleri birlikte gruplamak için bir yola ihtiyacı vardı.
Bu, farklı türdeki verilerin gruplandırılmasına izin veren C'deki yapıların geliştirilmesine yol açtı. Yapılar, çeşitli verilerin depolanmasına izin verdiği için dizilere göre bir gelişmeydi. Bununla birlikte, yapılar, içlerinde işlevleri tanımlama yeteneğinden yoksundu.
Nesne yönelimli programlamanın gelişiyle birlikte nesneler tanıtıldı. Bir nesne, nesneler için şablon görevi gören bir sınıfın örneğidir. Nesneler veri depolayabilir ve işlevleri tanımlayabilir. Sınıf, nesnelerin ortak özniteliklerini ve davranışlarını tanımlarken, nesneler kendi benzersiz verileriyle belirli örnekleri temsil eder.
Kapsülleme, nesne yönelimli programlamanın ana ilkelerinden biridir. Verileri ve yöntemleri bir sınıf içinde bir araya getirmeyi ve bunları harici erişimden gizlemeyi içerir. Diğer sınıflar, yalnızca sınıfın getter ve setter yöntemleri gibi yöntemleri aracılığıyla bir nesnenin nitelikleriyle etkileşime girebilir. Kapsülleme, verilerin kontrolünün sürdürülmesine yardımcı olur ve dahili özniteliklere doğrudan erişimi engelleyerek program karmaşıklığını azaltır.
Soyutlama, gereksiz karmaşıklıkları gizlerken temel ayrıntıları göstermeye odaklanan başka bir ilkedir. Programlamada bu, kodun farklı bölümleri arasında iletişime izin veren sınıflar için arayüzlerin tanımlanması anlamına gelir. Yöntemlerin tam uygulaması sınıf içinde gizlidir ve dış sınıflar yalnızca tanımlanan arabirimle etkileşime girer. Bu yaklaşım, modüler programlamayı etkinleştirir ve birden çok programcı arasında işbirliğini kolaylaştırır.
Sonraki bölümlerde, nesne yönelimli programlamanın geri kalan ilkelerini tartışacağız: kalıtım ve çok biçimlilik. Bu ilkeler, nesne yönelimli programlamada kodun esnekliğini ve yeniden kullanılabilirliğini daha da artırır.
Nesne yönelimli programlamaya giriş için bu kadar. Bir sonraki bölüme geçelim ve kapsüllemeyi daha ayrıntılı olarak inceleyelim.
C++ OOP - Yeni başlayanlar için sınıflara ve nesnelere giriş
C++ OOP - Yeni başlayanlar için sınıflara ve nesnelere giriş
Kanalıma hoş geldiniz millet! Ben Saldina, BT ve programlama ile ilgili videolar hazırlıyorum. Bu konularla ilgileniyorsanız, kanalıma abone olmayı ve bu videoya bir beğeni vermeyi düşünün.
Bu videoda nesne yönelimli programlama (OOP) dünyasını derinlemesine incelemek istiyorum. Peki, nesne yönelimli programlama tam olarak nedir? OOP, programlamada gerçek hayattaki nesneleri nitelikleri ve davranışlarıyla birlikte temsil etmemizi sağlar.
OOP'deki iki temel kavram, sınıflar ve nesnelerdir. İkisi arasındaki farkı anlayalım. Bir sınıf, bir nesnenin yapısını ve davranışını tanımlayan bir şablon veya plan görevi görür. Öte yandan, bir nesne bir sınıfın örneğidir. Bunu göstermek için, meyveleri temsil eden bir sınıf düşünün ve bu sınıfın nesneleri bir elma, muz veya şeftali olabilir. Benzer şekilde, arabaları temsil eden bir sınıfın Volvo, Ford veya BMW gibi nesneleri olacaktır. Her sınıfın ad, fiyat, maksimum hız ve renk gibi nitelikleri (özellikleri) ve sürüş, fren ve renk değiştirme gibi davranışları (yöntemleri) vardır.
Şimdi "YouTubeChannel" adında bir örnek sınıf oluşturalım. Bir sınıf oluşturmak için, "class" anahtar kelimesini ve ardından sınıf adını süslü parantezler içinde kullanırız. Ayrıca "public" erişim değiştiricisini kullanarak sınıf üyelerini sınıf dışından da erişilebilir kılmamız gerekir. YouTubeChannel sınıfımızda, kanalın adı, sahibinin adı, abone sayısı ve yayınlanan video başlıklarının listesi gibi özellikleri tanımlayacağız. Bu nitelikleri temsil etmek için onlara değerler atarız. YouTubeChannel sınıfından bir nesne oluşturuyoruz ve nokta gösterimini kullanarak özelliklerine erişiyoruz. Örneğin YouTube kanalının adını "CodeBeauty", sahibinin adını da "Saldina" olarak atayabiliriz.
Ayrıca abone sayısını 1800 olarak belirleyebilir ve yayınlanmış üç video başlığını listeye ekleyebiliriz. Bu özelliklerde depolanan bilgileri görüntülemek için, bunları yazdırmak için "cout" kullanırız. Bir koleksiyon olan yayınlanmış video başlıklarının listesi için, bir döngü kullanarak tekrarlayabilir ve her video başlığını yazdırabiliriz. Programı çalıştırarak, YouTube kanalının ayrıntılarını gösteren çıktıyı görebiliriz: kanal adı, sahip adı, abone sayısı ve yayınlanan video başlıklarının listesi.
Gelecekteki videolarda, sınıflar ve nesnelerle çalışmaya daha akıcı yaklaşımlar sağlayan oluşturucular ve sınıf yöntemleri gibi konuları ele alacağız.
Umarım bu videoyu beğenmişsinizdir! Yararlı bulduysanız, lütfen beğenin ve zil simgesini tıklayarak kanalıma abone olmayı düşünün. Daha heyecanlı içerikler için takipte kalın. Bir sonraki videoda görüşmek üzere. Hoşçakal!
C++ OOP (2020) - Yapıcılar ve sınıf yöntemleri nelerdir? Nasıl kullanılır?
C++ OOP (2020) - Yapıcılar ve sınıf yöntemleri nelerdir? Nasıl kullanılır?
Herkese merhaba, kanalıma hoş geldiniz! Ben Saldina ve bu kanalda programlama ile ilgili videolar çekiyorum. Bu ilginizi çekiyorsa, abone olmayı ve bu videoyu beğenmeyi düşünün. Bu videomda yapılandırıcılardan ve sınıf metotlarından bahsetmek istiyorum.
Önceki bir eğitimde, YouTubeChannel adlı bir sınıf için bazı kodlar yazmıştık. Dört genel özelliği vardır: ad, sahip adı, abone sayısı ve yayınlanan video başlıklarının listesi. O sınıftan bir nesne yarattık ve özelliklerine değerler atadık. Şimdi, bu yaklaşımla ilgili bir sorunu ele alalım. Başka bir YouTube kanalı nesnesi oluşturmak istiyorsak, kodu kopyalayıp yapıştırmamız ve buna göre değişiklikler yapmamız gerekir. Bu, "Kendini Tekrarlama" ilkesini ihlal ediyor. Bu sorunu çözmek için yapıcıları ve sınıf yöntemlerini kullanabiliriz.
Yapıcı, bir nesne oluşturulduğunda çağrılan özel bir yöntemdir. Sınıfla aynı ada sahiptir ve dönüş tipi yoktur. YouTubeChannel sınıfı için bir yapıcı oluşturalım. İki parametre alacaktır: ad ve sahip adı. Yapıcı içinde, bu parametreleri karşılık gelen özelliklere atayacağız. Yapıcıyı oluşturduktan sonra, gerekli değerleri ileterek nesneleri oluşturmak için kullanabiliriz. Bu, nesneleri oluşturmak için kodu tekrar etme ihtiyacını ortadan kaldırır. Kanallar hakkında bilgi görüntülemek için kod tekrarını önlemek için sınıf yöntemlerini de kullanabiliriz.
Kanal bilgilerini yazan getInfo adlı bir sınıf yöntemi oluşturalım. Bilgileri görüntülemek için kodu bu yönteme taşıyabilir ve her iki nesne için de kullanabiliriz. getInfo yöntemini çağırmak için, nesnenin adını ve ardından bir nokta ve yöntem adını kullanarak onu nesne üzerinde çağırabiliriz. Bu şekilde, kodu kopyalamadan her iki kanal için bilgileri görüntüleyebiliriz.
Kurucuları ve sınıf yöntemlerini kullanarak daha temiz ve daha verimli kod elde ediyoruz. Ana işlevin okunması ve bakımı daha kolay hale gelir. Yapıcılar, nesne özelliklerinin başlatılmasını işlerken, sınıf yöntemleri sınıfın ortak davranışlarını kapsar.
Umarım bu videoyu faydalı bulmuşsunuzdur. Eğer beğendiyseniz, lütfen bir başparmak verin ve kanalıma abone olun. Gelişmelerden haberdar olmak için zil simgesine basmayı unutmayın. Bir sonraki videomda görüşmek üzere. Hoşçakal!
C++ OOP - Programlamada kapsülleme nedir?
C++ OOP - Programlamada kapsülleme nedir?
Herkese selam! Ben Saldina, programlamayla ilgili kanalıma hoş geldiniz. Programlamayla ilgileniyorsanız, abone olmayı ve bu videoyu beğenmeyi düşünün. Bu videoda kapsüllemeyi tartışacağız.
İlk olarak, önceki videolarımızdaki kodu hızlıca inceleyelim. Herkese açık özelliklere sahip bir YouTubeChannel sınıfımız var: ad, sahip adı, abone sayısı ve yayınlanan video başlıklarının listesi. Ayrıca bir YouTubeChannel oluşturucumuz ve bir getInfo yöntemimiz var.
Şimdi, kapsüllemeye odaklanalım. Kapsülleme ilkesi, özelliklerin özel olması gerektiğini ve değerlerine sınıfın sunduğu yöntemlerle erişilmesi ve değiştirilmesi gerektiğini belirtir. Bu, kontrollü ve uygun veri manipülasyonunu sağlar. Kapsülleme ihtiyacını göstermek için, bir problem tanıtalım. Şu anda abone sayısına doğrudan bir değer atayabiliyoruz, bu şekilde abonelerin doğal olarak artması veya azalması gerekmiyor. Bunun yerine, bu değişiklikleri kontrol etmek için abone olma ve abonelikten çıkma gibi yöntemler sağlamalıyız.
Özellikleri kullanıcılardan gizlemek için onları özel yapacağız. Erişim değiştiricilerini özel olarak değiştirerek, bu özelliklere doğrudan erişimi kısıtlıyoruz. Ancak, özel üyelere artık sınıfın dışından erişilemeyeceği için bu hatalara neden olur. Kullanıcıların abone sayısını değiştirmesine izin vermek için iki yöntem oluşturduk: abone ol ve abonelikten çık. Abone olma yöntemi abone sayısını artırırken abonelikten çıkma yöntemi azaltır. Bu yöntemleri kullanarak, kullanıcılar sınıfla etkileşim kurabilir ve yöntemlerin tanımladığı kuralları takip edebilir.
Abonelikten çıkma yönteminde bir sorunla karşılaştık. Şu anda sayımın negatif olmasına izin veriyor. Bunu düzeltmek için, azaltmadan önce sayımın sıfırdan büyük olmasını sağlayan bir kontrol eklememiz gerekir. Ek olarak, şu anda erişilemeyen başka bir özel mülkümüz, yayınlanmış video başlıklarımız var. Bu özelliğe erişim sağlamak için, PublishVideo adlı bir yöntem oluşturacağız. Bu yöntem bir dizi parametresi (video başlığı) alır ve onu push_back yöntemini kullanarak yayınlanan video başlıkları listesine ekler.
Son olarak, kullanıcıların sınıfla etkileşime girmesine ve özel özellikleri değiştirmesine izin veren yöntemleri açığa çıkardık. Ad ve sahip adı özelliklerine erişimi daha fazla kontrol etmek için alıcı ve ayarlayıcı yöntemleri oluşturabiliriz.
Kapsüllemeyi özetlemek gerekirse:
Alıcı ve ayarlayıcı yöntemlerini uygulayan herhangi bir kodunuz varsa, inceleme için yorumlar bölümünde paylaşmaktan çekinmeyin.
Bu videoyu beğendiyseniz, lütfen beğenin, kanalıma abone olun ve gelecekteki videolardan haberdar olmak için zil simgesini tıklayın. İzlediğiniz için teşekkürler, bir sonraki videoda görüşmek üzere! Hoşçakal!
C++ OOP - Programlamada kalıtım nedir?
C++ OOP - Programlamada kalıtım nedir?
Herkese merhaba, ben Saldina ve programlama ile ilgili videolar hazırlıyorum. Bununla ilgileniyorsanız, kanalıma abone olmayı düşünün. Ayrıca, bu videoya bir başparmak verin. Bu videoda kapsüllemeyi tartışmak istiyorum.
Bu kursun önceki videolarında bazı kodlar yazdım. Onları görmediyseniz, kontrol ettiğinizden emin olun. Linkleri video açıklamasında vereceğim. Anlamanıza yardımcı olmak için kodu hızlıca gözden geçireyim. Dört genel özelliğe sahip bir YouTubeChannel sınıfı oluşturdum: ad, sahip adı, abone sayısı ve yayınlanan video başlıklarının listesi. YouTubeChannel yapıcısı ve getInfo yöntemi de mevcuttur. Yapıcı kodunu burada görebilirsiniz.
Ana işlevde, YouTubeChannel sınıfından bir nesne oluşturdum ve ad ile sahip adı için değerler atadım. Ayrıca yayınlanan video listesine üç video ekledim. Son olarak, kanalla ilgili bilgilerin çıktısını aldım. Şimdi kapsülleme hakkında konuşalım. Bu ilke, bu mülklerin halka açık değil, özel olması gerektiğini öne sürer. Bu özelliklerde depolanan veriler, yalnızca kullanıcıya sunduğunuz yöntemlerle değiştirilmelidir. Kullanıcı, bu yöntemlerin kurallarına uyarak özellik değerlerini değiştirebilir.
Kapsüllemeye neden ihtiyaç duyduğumuzu anlamak için bir problem düşünelim. Bu YouTube kanalının abone sayısını bir milyon olarak ayarlarsam ne olur? Buna izin verilmemeli. Kodu çalıştırırsam, kanalın artık bir milyon abonesi olduğunu göreceksiniz. Ancak, abone kazanmak doğal olarak kullanıcıların abone olma ve abonelikten çıkma yöntemlerini kullanmasını gerektirir. Bu yöntemler kullanılarak abone sayısı artırılır veya azaltılır. Bu özellikleri kullanıcıdan gizlemek için onları genel yerine özel yaparız. Bu, yalnızca sınıfın kendi içinden erişilebilecekleri anlamına gelir. Kullanıcıların abone sayısını değiştirmesine izin vermek için iki yöntem oluşturuyoruz: abone olma ve abonelikten çıkma. Abone olma yöntemi abone sayısını artırırken abonelikten çıkma yöntemi azaltır.
Aboneleri artırmak veya azaltmak için şimdi bu yöntemleri çağırmamız gerekiyor. Örneğin youtubeChannel.subscribe(), üç aboneliği simüle etmek için üç kez kullanılır. youtubeChannel.unsubscribe()'ı çağırır ve ardından getInfo'yu çağırırsam, iki abone olduğunu görürsünüz. Yayınlanan video başlıkları özelliği artık özel ve erişilemez olduğu için bir derleme zamanı hatasıyla da karşılaşıyoruz. Bunu çözmek için, yayınlanan video başlıkları listesine bir video başlığı ekleyen, PublishVideo adlı bir yöntem oluşturuyoruz. Yöntem, kullanıcının video başlığını belirlemesine izin veren bir başlık parametresi alır. youtubeChannel.publishVideo("Title") işlevini çağırarak videoları listeye ekliyoruz.
Özet olarak, kapsülleme, özellikleri özel yapmayı ve bunları değiştirmek için genel yöntemler sağlamayı içerir. Belirli özelliklere erişmek ve bunları değiştirmek için alıcı ve ayarlayıcı yöntemleri kullanılabilir. İnceleme için yorumlarda alıcı ve ayarlayıcı yöntemleri uygulamanızı paylaşmaktan çekinmeyin.
Bu videoyu faydalı bulduysanız, beğenin, kanalıma abone olun ve zil simgesini tıklayın. Daha fazla video için takipte kalın. Bir dahaki sefere görüşürüz! Hoşçakal!
C++ OOP - Programlamada polimorfizm nedir? (basit örnek)
C++ OOP - Programlamada polimorfizm nedir? (basit örnek)
Herkese merhaba, kanalıma hoş geldiniz. Benim adım Saldina, BT ve programlama ile ilgili videolar hazırlıyorum. Bu ilginizi çekiyorsa, kanalıma abone olmayı ve bu videoya bir beğeni vermeyi düşünün. Bu özel videoda polimorfizm hakkında konuşmak istiyorum.
Polimorfizm, bir nesnenin birden fazla forma sahip olma yeteneğini ifade eder. Bu, aynı temel sınıftan miras alan iki veya daha fazla nesneye sahip olabileceğiniz anlamına gelir. Bu nesneler, aynı ada ancak farklı uygulamalara sahip bir yönteme sahip olabilir ve bu da farklı davranışlarla sonuçlanır. Önceki derslerimde yazdığımız bazı kodlara bir göz atalım. Ad, abone sayısı ve yayınlanan video başlıkları gibi özel özelliklere sahip "YouTubeChannel" adlı bir sınıf oluşturdum. Ayrıca "sahip adı" adı verilen korumalı bir özelliği vardır. Ek olarak, genel yöntemler, bir yapıcı, bir "getInfo" yöntemi ve "abone ol/abonelikten çık" yöntemleri vardır.
Daha sonra, temel sınıftan miras kalan "CookingYouTubeChannel" adlı belirli bir YouTube kanalımız var. Kendi yapıcısı ve pişirme kanallarına özgü "alıştırma" adı verilen ek bir yöntemi vardır. Şimdi şarkı söylemeyle ilgili bir YouTube kanalı için "SingersYouTubeChannel" adında başka bir türetilmiş sınıf oluşturmak istiyorum. Bu sınıfın da bir "uygulama" yöntemi vardır, ancak uygulama pişirme kanalından farklıdır. Şarkıcılar şarkı söyleme, yeni şarkılar öğrenme ve hatta dans etme pratiği yapardı.
Polimorfizmi göstermek için hem yemek pişirme hem de şarkıcıların YouTube kanallarından örnekler oluşturuyorum. Ardından, her kanalda "alıştırma" yöntemini çağırırım. İlgili uygulamaların kanal türüne göre çağrıldığını görebilirsiniz. Ek olarak, içeriğin kalitesini izlemek için bir "contentQuality" özelliği tanıtıyorum. "Uygulama" yöntemi her çağrıldığında içerik kalitesi artar. Ayrıca, içerik kalitesi derecelendirmesini kontrol eden ve derecelendirmeye göre bir mesaj çıkaran "checkAnalytics" adlı bir yöntem ekliyorum.
Polimorfizmi daha fazla sergilemek için, türetilmiş sınıfların nesnelerine işaret etmek için temel sınıfa yönelik işaretçiler kullanıyorum. Aşçı ve şarkıcıların YouTube kanallarının adreslerini bu işaretçilere atıyorum. Bu işaretçileri kullanarak, her kanal için "checkAnalytics" yöntemini çağırarak, polimorfizmin türetilmiş sınıf yöntemlerini çağırmak için temel sınıf işaretçilerini kullanmamıza izin verdiğini gösteriyorum.
Umarım bu videoyu eğlenceli bulmuşsunuzdur. Eğer yaptıysanız, lütfen beğenin ve kanalıma abone olmayı düşünün. Gelecek videolardan haberdar olmak için zil simgesine tıklamayı unutmayın. Teşekkürler, bir sonraki videomda görüşmek üzere. Hoşçakal!
OOP'de Virtual Functions, Pure Virtual Functions ve Abstract Classes arasındaki ilişki açıklandı
OOP'de Virtual Functions, Pure Virtual Functions ve Abstract Classes arasındaki ilişki açıklandı
Bu videoda sanal fonksiyonlar, saf sanal fonksiyonlar ve soyut sınıflar arasındaki amacı ve ilişkiyi anlatacağım. Bu nesne yönelimli programlama çalma listesine devam edeceğim için heyecanlıyım. Gelecek videolarda görmek istediğiniz herhangi bir sorunuz veya konu varsa, lütfen aşağıya bir yorum bırakın. Şimdi sanal fonksiyonlara geçelim.
Sanal işlev, temel sınıfta tanımlanan bir işlevdir ve türetilmiş bir sınıfta yeniden tanımlanabilir. Sanal işlevlerin temel amacı, çalışma zamanı polimorfizmini etkinleştirmektir. Bir temel sınıf işaretçisi veya referansı kullanarak bir sanal işlevi çağırdığınızda, o işlevin en türetilmiş sürümü yürütülür. Türetilen sınıfın kendi uygulaması varsa, o sürüm yürütülür. Aksi takdirde, temel sınıftaki uygulama kullanılacaktır.
Visual Studio'da bir örneğe bakalım. Bir mesaj çıkaran "makeSound" adlı sanal bir işleve sahip bir "Enstrüman" sınıfı oluşturacağız. Ardından, "makeSound" işlevini kendi uygulamasıyla geçersiz kılan "Accordion" adlı türetilmiş bir sınıf oluşturacağız. İşlevi çağırmak için bir temel sınıf işaretçisi kullanarak, türetilen sürümün yürütüldüğünü görebiliriz. Temel sınıf işlevine "sanal" anahtar sözcüğünü eklemek, en türetilmiş sürümün çağrılmasını sağlar.
Ardından, saf sanal işlevleri ve soyut sınıfları tartışalım. Saf bir sanal işlev, temel sınıfta uygulaması olmayan bir sanal işlevdir. Türetilmiş sınıfları kendi uygulamalarını sağlamaya zorlar. Bir sanal işlevi "sıfıra eşit" olarak ayarlayarak, saf bir sanal işlev yaratırız. Bu, temel sınıfı somutlaştırılamayan soyut bir sınıf yapar. Türetilmiş sınıflar saf sanal işlevi uygulamalıdır. "Enstrüman" sınıfından türetilmiş bir "Piyano" sınıfı oluşturacağız. Saf sanal işlevi uygulamadan "Piyano" türünde bir nesne oluşturmaya çalışırsak, bu bir hatayla sonuçlanacaktır. Ancak, "Piano" sınıfında işlevi uyguladığımızda, başarıyla bir nesne oluşturabilir ve işlevi çağırabiliriz.
Son olarak, sanal fonksiyonların polimorfik davranışını keşfedelim. Biri "Akordeon" nesnesine, diğeri "Piyano" nesnesine işaret eden iki enstrüman işaretçimiz var. Bir araç işaretçisi dizisi oluşturarak, temel sınıf işaretçilerini kullanarak "makeSound" işlevini çağırmanın, işlevin türetilmiş sürümlerinin yürütülmesiyle sonuçlandığını gösterebiliriz.
Umarım bu açıklama, sanal işlevleri, saf sanal işlevleri ve soyut sınıfları daha iyi anlamanıza yardımcı olur. Başka sorularınız varsa, lütfen aşağıdaki yorumlarda bana bildirin. İzlediğiniz için teşekkürler, abone olmayı unutmayın!
Gerçek hayattan örnekler ve kodlarla açıklanan soyutlama! - C++ OOP Kursu
Gerçek hayattan örnekler ve kodlarla açıklanan soyutlama! - C++ OOP Kursu
Bu videoda, nesne yönelimli programlamadaki önemli soyutlama kavramını tartışacağım. Soyutlamanın ne olduğunu açıklayacağım ve soyutlamanın C++ programlamada nasıl uygulanacağını ve kullanılacağını göstereceğim. Ancak konuya girmeden önce, daha az kodla birden çok platform için hızlı uygulama geliştirmeye olanak tanıyan güçlü bir IDE olan C++ Builder'ı tanıtmak istiyorum. Çeşitli veritabanlarına sorunsuz bir şekilde bağlanır ve VCL ve FireMonkey çerçeveleri gibi güçlü kitaplıklar içerir. Açıklamadaki bağlantıyı kullanarak ücretsiz başlayın.
Programlamada soyutlama, karmaşık ve önemsiz ayrıntıları gizlerken önemli bilgileri gösterme eylemini ifade eder. Soyutlamayı daha iyi anlamak için gerçek hayattan bir örnek ele alalım: bir kahve makinesi. Bir kahve makinesi kullanırken, bilmeniz gereken tek şey kahveyi ve suyu nasıl koyacağınız ve kahve yapmak için bir düğmeye basmanızdır. Makinenin iç süreci karmaşıktır, ancak soyutlanmıştır ve basit bir prosedürün arkasına gizlenmiştir. Bu soyutlama, kullanıcıların makinenin karmaşık işleyişini anlamadan makineyi çalıştırmasını kolaylaştırır. Benzer şekilde, programlamada karmaşık ayrıntıları gizlemek ve basitleştirilmiş bir arayüz sağlamak için soyutlamayı kullanırız.
Soyutlamanın bir diğer önemli yönü, soyutlanan öğelerin sık sık değişmemesi veya en azından son kullanıcı için değişmiyor gibi görünmesidir. Bu, kullanıcıya sunulan arayüzü değiştirmediğiniz sürece dahili uygulamayı değiştirebileceğiniz anlamına gelir. Örneğin, yeni bir şirket daha verimli bir kahve makinesi geliştirirse, enerji tüketimini azaltmak, kahveyi daha hızlı yapmak ve gürültüyü azaltmak için dahili bileşenleri değiştirebilir. Kullanıcının kahve ve su koyması ve düğmeye basması gerektiği sürece arayüz aynı kalır ve kullanıcının makineyi çalıştırmanın yeni bir yolunu öğrenmesi gerekmez. Soyutlama yoluyla davranışın bu standardizasyonu, yeni şirketlerin mevcut kullanıcı beklentileri üzerine inşa etmesine olanak tanır.
Programlamada, karmaşık detayları gizlemek ve diğer geliştiriciler için basitleştirilmiş bir arayüz sağlamak için soyutlama katmanları oluşturabiliriz. Örneğin, çeşitli karmaşık işlevlere sahip bir sınıf oluşturursam, temeldeki karmaşıklığı gizleyen bir soyutlama katmanı sağlayabilirim. Diğer geliştiriciler daha sonra uygulama ayrıntılarını bilmeye ihtiyaç duymadan sınıfın basit arayüzünü kullanabilir. C++'da, en az bir saf sanal işlev içeren soyut sınıfları kullanarak soyutlama elde ederiz. Bu soyut sınıflar, diğer sınıfların uygulaması gereken sözleşmeyi veya arabirimi tanımlar.
Bunu göstermek için "Akıllı Telefon" adında soyut bir sınıf oluşturalım. Tüm akıllı telefonların sahip olması gereken önemli bir işlevsellik olarak hizmet veren "Bir selfie çek" adlı bir genel işlev ilan edecek. Bu işlevi "= 0" sözdizimini kullanarak saf bir sanal işlev yaparak, sınıfı soyut bir sınıfa dönüştürürüz. Doğrudan soyut sınıf örnekleri oluşturamayız, ancak onlara işaretçiler oluşturabiliriz. Akıllı telefon olmak isteyen herhangi bir sınıf, bu soyut sınıftan miras almalı ve saf sanal işlevin kendi uygulamasını sağlamalıdır.
Örneğin, "Akıllı telefon" sınıfından miras alan bir "Android" sınıfı oluşturalım. Bu dersimizde Android cihazlara özel karmaşık mantıkla "Özçekim yap" fonksiyonunu uyguluyoruz. Benzer şekilde, yine "Akıllı Telefon"dan miras alan ve "Bir selfie çek" işlevinin kendi uygulamasını sağlayan bir "iPhone" sınıfı oluşturabiliriz. Her sınıfın kendine özgü uygulaması olabilir, ancak akıllı telefon kullanan birinin bakış açısından süreç aynı kalır.
"Akıllı telefon" sınıfı aracılığıyla elde edilen soyutlama, Android veya iPhone sınıfları üzerinde çalışan geliştiricilerin, diğer sınıfın mantığını bilmeye gerek duymadan kendi özel uygulama ayrıntılarına odaklanmalarını sağlar. Yalnızca gerekli işlevlerin uygulandığından emin olarak soyut sınıf tarafından tanımlanan sözleşmeye uymaları gerekir. Soyutlamayı kullanarak, endişelerin ayrılmasını sağlar, kod kullanımını basitleştirir ve modüler geliştirmeyi kolaylaştırırız. Soyutlama, standartlaştırılmış arayüzler oluşturmamıza ve karmaşık uygulamaları gizlememize izin vererek daha fazla bakım sağlar.
Soyutlama, standartlaştırılmış arabirimler oluşturmamıza ve karmaşık uygulamaları gizlememize olanak tanıyarak daha sürdürülebilir ve esnek kod elde etmemizi sağlar. İşlevselliği diğer sınıflar tarafından genişletilebilen ve uygulanabilen soyut sınıflara yerleştirerek kodun yeniden kullanımını ve modüler geliştirmeyi destekler. Soyut sınıflara ek olarak, C++ arabirimler adı verilen başka bir soyutlama mekanizması da sağlar. Arayüzler, arayüze bağlı kalmak isteyen herhangi bir sınıf tarafından uygulanması gereken bir yöntem sözleşmesi tanımlayan tamamen soyut sınıflardır. Bu, bileşenler arasında daha fazla soyutlama ve gevşek bağlantı sağlar.
Özetlemek gerekirse, nesne yönelimli programlamada soyutlama, karmaşık detayları gizleme ve basitleştirilmiş bir arayüz sağlama sürecidir. Geliştiricilerin, altta yatan karmaşıklığı ortadan kaldırırken belirli uygulamalara odaklanmasına olanak tanır. Soyut sınıflar ve arayüzler, C++'da soyutlamaya ulaşmak için birincil araçlardır. Soyutlamayı kullanarak daha modüler, yeniden kullanılabilir ve bakımı yapılabilir kodlar oluşturabiliriz.
Başlangıç seviyesinden ileri seviyeye C++ Operatör Aşırı Yüklemesi (derinlemesine açıklama)
Başlangıç seviyesinden ileri seviyeye C++ Operatör Aşırı Yüklemesi (derinlemesine açıklama)
Herkese merhaba ve kanalıma hoş geldiniz. İşimin ortasındaydım ve bu videoyu çekmeyi planlamamıştım ama çok ilginç bir proje üzerinde çalıştığım için size neden göstermeyeyim diye düşündüm. Şu anda binlerce dosya ve milyonlarca kod satırı içeren büyük bir proje üzerinde çalışıyorum. Tamamlanması genellikle 10 ila 15 dakika süren kodumu analiz etmek üzereydim. Analizi beklerken size operatör aşırı yüklemesini öğreteceğim.
Kullandığım analizörün adı PDS Studio'dur ve açıklamadaki bağlantıyı kullanarak ücretsiz olarak edinebilirsiniz. Hataları bulmak ve kodumu optimize etmek için PDS Studio'yu nasıl kullandığımı size göstereceğim. PDS Studio'yu indirdikten sonra, analiz etmek için bazı kodlara ihtiyacınız var. Çözümü iş yerimden aldım, ancak gizlilik sözleşmesi nedeniyle size kodu gösteremiyorum. Ancak videonun devamında size analizin sonuçlarını göstereceğim.
PDS Studio kullanarak kodunuzu analiz etmek için Uzantılar sekmesine tıklamanız ve PDS Studio'yu seçmeniz gerekir. Ardından, analiz için tüm çözümü seçin. Analiz biraz zaman aldığı için boş bir projeye geçeceğim ve bu arada size operatör aşırı yüklemesini öğreteceğim.
Operatör aşırı yüklemesi, belirli bir operatörün belirli bir veri türüyle nasıl davranacağını tanımlamamızı sağlar. Örneğin, artı işleci, kullanıcı tanımlı bir veri türüyle kullanıldığından sayılarla kullanıldığında farklı davranır. Bu davranışı tanımlamak için operatör fonksiyonları oluşturabiliriz. Bu kavramı, kullanıcı tanımlı iki veri türü ekleme örneğini kullanarak açıklayacağım.
C++'da "operator" anahtar kelimesini ve ardından aşırı yüklemek istediğimiz operatörü kullanarak operatör fonksiyonları oluşturabiliriz. Örneğin, bir "operatör+" fonksiyonu oluşturarak artı operatörünü aşırı yükleyebiliriz. Bunu, "ad" ve "abone sayısı" olmak üzere iki özelliğe sahip "YouTubeChannel" adlı bir yapı oluşturarak göstereceğim. Ayrıca bu yapı için bir kurucu oluşturacağız.
YouTubeChannel türümüz için ekleme operatörünü (<<) aşırı yüklemek için bir "operator<<" işlevi tanımlamamız gerekiyor. Bu işlev iki parametre alır: "ostream" (ör. "cout") türünde bir nesne ve "YouTubeChannel" türünde bir nesne. Gereksiz kopyalamayı önlemek için bu parametreleri referans olarak iletiyoruz.
"operator<<" işlevinin içinde, YouTubeChannel hakkındaki bilgileri çıkarmak için "ostream" nesnesini kullanırız. Bu durumda, adı ve abone sayısını yazdırıyoruz. Ekleme operatörünü aşırı yükleyerek, "cout" komutunu kullanarak YouTubeChannel nesnelerinin yazdırılmasını sağlıyoruz.
Aşırı yüklenmiş ekleme operatörünü kullanmak için basitçe "cout << youtubeChannelObject" yazabiliriz. Bu, "cout" kullanarak diğer türleri nasıl yazdırdığımıza benzer şekilde çalışır. "cout" nesnesini ve YouTubeChannel nesnesini parametre olarak ileterek, normal bir işlev gibi doğrudan operatör işlevini de çağırabiliriz.
Farklı operatörlerin farklı aşırı yükleme yöntemleri olduğunu unutmayın. Ekleme işleci, "işleç<<" işlevi kullanılarak aşırı yüklenir, ancak artı, eksi, büyüktür, küçüktür, eşittir vb. gibi diğer işleçlerin kendi özel işleç işlevleri vardır.
Bu video için bu kadar. Umarım operatör aşırı yüklemesine yönelik bu tanıtımı faydalı bulmuşsunuzdur. C++'da aşırı yüklenebilecek tüm işleçlerin listesi için açıklamayı kontrol edin. Analiz tamamlandığında, size sonuçları göstereceğim. Herhangi bir sorunuz varsa, yorumlarda sormaktan çekinmeyin. İzlediğiniz için teşekkürler!