Yapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, bir eğitmen tarafından sunulan ABAP programlama dilinde nesne tabanlı programlama kavramlarını anlatan kapsamlı bir eğitim dersidir. Videoda Merve adında bir kişi de yer almaktadır.
- Video, ABAP'de sınıf kavramından başlayarak, arayüzler (interface), abstract class'lar, miras alma (inheritance), encapsulation, polimorfizm ve DIP gibi temel nesne yönelimli programlama kavramlarını detaylı şekilde ele almaktadır. Ayrıca instance ve statik metotlar arasındaki farklar, SAP altyapısındaki entegrasyon mantığı ve Z tablosu kontrol mekanizması gibi konular da açıklanmaktadır.
- Eğitim içeriği, ABAP programlama dilinde objektif programlama paradigmasının avantajlarını, kod tekrarını öneme, kodun yeniden kullanılabilirliğini artırma ve farklı platformlarda kullanılabilir kodlar oluşturma yöntemlerini örneklerle anlatmaktadır. SAP sistemlerindeki mimari tasarım prensipleri, kullanıcı altyapısı ve entegrasyon mantığı hakkında teknik bilgiler de videoda yer almaktadır.
- 00:01Giriş ve Sınıf Kavramı
- Konuşmacı, zamanın kısıtlı olduğunu belirterek hızlı bir giriş yapacağını ve konuşmasında belirli kavramları ele alacağını belirtiyor.
- Konuşmacı, dinleyicilerin bilgi seviyelerinin farklı olabileceğini düşünerek genel bir giriş yapacağını ve gerekirse hızını ayarlayabileceğini belirtiyor.
- Konuşmacı, ABAP dünyasında sınıf kavramının önemini vurgulayarak, programların arkasında çalışan küçük paketler olduğunu açıklıyor.
- 01:47Sınıf Kullanımının Avantajları
- Eskiden yazılan ABAP programlarında tüm kodlar tek bir dosyada toplanırken, modern ABAP paradigmasında programların tek görevi kullanıcıyla iletişim sağlamak, veri işlemlerinin ise sınıfların sorumluluğunda olmaktedir.
- Sınıf kullanmanın temel avantajı, kodun tekrar kullanılabilir olması ve farklı platformlarda (örneğin Fiori) kullanılabilmesidir.
- Sınıf kullanmadan kod tekrarı yapmak, "double meta" sorununa yol açabilir ve aynı kodun farklı yerlerde bulunması bakım ve güncelleme işlemlerini zorlaştırabilir.
- 07:07Sınıf Yapısı ve Gizlilik
- Bir sınıfın iki temel bileşeni vardır: yordamlar (metotlar) ve değişkenler.
- Sınıflar, yordamların kendi arasında paylaştığı değişkenleri içerir ve bu değişkenler sürekli bellekte kalır.
- Sınıf tasarlarken, bazı değişkenleri ve yordamları "public" (halka açık) yaparak dışarıdan erişilebilir hale getirebilir veya "private" (gizli) yaparak erişimi kısıtlayabilirsiniz.
- 10:22Sınıf Kapsülleme ve Erişim Kontrolü
- Sınıflar içindeki öğeleri public yaparak dışarıdan erişilebilir hale getirebilirsiniz, private olanlar ise sınıfın iç işleyişiyle ilgilidir.
- Public öğeleri priz veya USB'nin dışarıya açılan kısmı gibi, private öğeleri ise USB'nin içindeki gizli kısım gibi düşünülebilir.
- Örneğin, bir piyano veya org'da tuşlar public kısmıdır, içindeki elektronik mekanizma ise private kısmıdır.
- 11:49Yordamlar ve Sınıf Türleri
- Yordamlar, sınıf içindeki küçük kod parçalarıdır ve bir form veya fonksiyon gibi düşünülebilir.
- Sınıflar genellikle "concrete class" olarak adlandırılır, başına başka bir şey koyulmazsa genellikle concrete class kastedilir.
- Sınıf kavramı, ürün yerleştirme gibi bir şeydir ve farklı türlerde olabilir.
- 13:08Interface Kavramı
- Interface, sınıf gibi değişken ve yordam tanımlayabilen ancak içine kod yazılamayan bir yapıdır.
- Interface, benzer giriş-çıkışları olan ancak iç işleyişi farklı olan sınıfları standartlaştırmak için kullanılır.
- Interface, programla çalışacak sınıfların uyması gereken bir prototip veya şablon oluşturur.
- 16:35Interface Kullanımı ve Avantajları
- Interface, farklı sistemlerle çalışırken aynı veri formatını kullanmayı sağlar; örneğin A durumunda gerçek stokları okuyup toplamını hesaplayabilirken, B durumunda başka bir sistemden stok çekebilirsiniz.
- Interface kullanarak standart bir şablon oluşturabilir ve bu şablona göre farklı sınıflar oluşturabilirsiniz; örneğin A, B ve C durumları için farklı sınıflar oluşturabilirsiniz.
- Interface sayesinde program seviyesinde hangi sistemle çalışıldığının önemi kalmaz, sadece interface tanıması yeterlidir ve yeni sistemler için mevcut sınıflardan kopya alıp içlerini doldurmak yeterlidir.
- 19:21Interface'in Bağımsızlık Sağladığı Avantajlar
- Bir sınıfın kodlamasında hata olursa, bu hata diğer sınıfları etkilemez; örneğin B sınıfında hata olsa bile A ve C sınıfları ile çalışmaya devam edilebilir.
- Interface kullanarak sınıfları canlıya bağımsız olarak atayabilirsiniz; örneğin B ve C sınıfları birbirine kilitleyen ek bir faktör yoksa, B bittiği anda canlıya atabilirsiniz.
- User exit altyapısında, tek bir interface üzerinden otuz-kırk farklı iş yapılabilir ve bunlar birbirinden bağımsız olarak yönetilebilir.
- 20:38Interface Kullanım Örneği
- Interface class'ı, belirli yordamları uygulamak zorunda olan sınıflar için şablon görevi görür; örneğin user exit'ler bu interface'i kullanır.
- Bir sınıfın hangi interface'i kullandığını, SAP'ta sınıfın interface tabına bakarak görebilirsiniz.
- Interface kullanmanın avantajı, input ve output aynı olup iç çalışma mekanizması farklı olan durumlarda ortaya çıkar; örneğin USB arayüzü sayesinde bilgisayara bağlanan farklı marka ve model hard diskler kullanılabilir.
- 23:48Interface Değişiklikleri ve Çoklu Interface Kullanımı
- Interface'de yapılan değişiklikler, kullanıldığı her yerde etkileyebilir; bu nedenle interface değişikliklerinde minimize etmeye çalışılır.
- Bir sınıf birden çok interface kullanabilir; örneğin TC kimlik numarası kontrolü hem müşteri standart ekranında hem de ZNA altyapısında çalışabilir.
- Birden fazla interface'de aynı isme sahip metodlar olsa bile, hangi interface'in hangi metodu olduğunu anlayabilirsiniz.
- 27:09Abstract Class Kavramı
- Abstract class, interface kullanımından daha nadir kullanılan bir yapıdır ve interface ile görevi birebir aynıdır.
- Abstract class'ın farkı, içerisinde kısmi kod yazabilmenizdir; ortak olacak yordamları kodlayabilir, diğerlerini boş bırakabilirsiniz.
- Abstract class, interface gibi şablon görevi görür ve türetilen sınıflar boş bırakılan yordamları doldurmak zorundadır.
- 28:05Mimari Kurulumu
- Mimari kurarken öncelik sırası vardır: önce mutlaka sınıf olur, sonra gerekli olduğunda interface açılır.
- Input ve output aynı olup iki farklı çalışacak programlar varsa interface kullanılır, böylece kodlar standartlaştırılır.
- Yüksek sayıda sınıf türetmek gerekiyor ve bazı sınıfları ortaklaştırmak istiyorsanız abstract class kullanılır.
- 29:30Abstract Class Avantajları
- Abstract class, ortak yordamları tek bir yerde kodlamanızı sağlar, örneğin tüm sınıfların aynı şekilde isinlama yapacağı bir metod.
- Abstract class'ta yapılan değişiklikler, alt sınıflarda otomatik olarak yansır, böylece tek bir yerde yapılan düzeltmeler tüm sınıflara etki eder.
- Abstract class kullanımı genelde %5-10 oranında görülür, en ideal mimari: interface > abstract class > concrete class sıralamasıdır.
- 31:05Sınıf Türetme
- Bir class'ten başka bir class üretmek mümkün olup, bu "inheritance" (miras) olarak adlandırılır.
- Miras alınan üst sınıfın tüm metotları ve değişkenleri alt sınıfa devredilir, ancak üstteki değişiklikler alt sınıfa yansımaya devam eder.
- Alt sınıflar, devraldığı yordamlardan sadece bir tanesini değiştirebilir, bu tavsiye edilen bir yöntem değildir.
- 32:17Miras Kullanım Örneği
- Farklı formatlarda gelen mağaza siparişlerini işlemek için genel bir mağaza interface'i açabilirsiniz.
- İki mağazanın formatı %95 aynıysa, ortak özellikler için ara katman bir abstract class oluşturabilirsiniz.
- Bu yapıda, kalitesizlik riski sadece o sınıfa özgü kalır, ancak üst sınıfta yapılan hatalar alt sınıfları da etkiler.
- 35:12Super Kavramı
- Miras alınan üst sınıf "super class" olarak adlandırılır.
- "Super" kelimesi, alt sınıfın üst sınıfındaki metodu çağırdığını gösterir.
- Alt sınıflar, üst sınıftaki metodları ezebilir (override) ve kendi mantıklarını uygulayabilir.
- 37:27Super Anahtar Kelimesi ve Kullanımı
- "Super" anahtar kelimesi, bir metodu ezdikten sonra, ezilmemiş halini çalıştırabilmek için kullanılır.
- "Super" kullanarak, ezmeyi devam ettirirken ek işlevler ekleyebilirsiniz.
- Bir sınıftan türetilen başka bir sınıfta "super" kullanıldığında, büyük ihtimalle üst sınıfın ezediği metodundan bir şey çağrılıyor demektir.
- 38:58Composition Kavramı
- Composition, bir sınıfın başka bir sınıftan obje taşıyabilmesi anlamına gelir.
- Composition over inheritance prensibi, sınıfları birbirinden karıştırmak yerine iç içe sınıflar barındırmak daha sade bir tasarıma götürür.
- Composition sayesinde sınıfları USB gibi takıp çıkarabilir, bir sınıf daha önceden yazılan sınıfları kendi içinde muhafaza edebilir.
- 42:01Inheritance ve Encapsulation
- Inheritance (devralma), parent-child ilişkisi ve parent'daki özellikleri, metotları child sınıfın devralabilmesi anlamına gelir.
- Encapsulation, değişkenleri public, private veya protected olarak kapsüllere koymak anlamına gelir.
- Protected değişkenler, üst sınıf tarafından görülmezken alt sınıflar tarafından görülebilir.
- 44:11Polimorfizm ve Dicaprim
- Polimorfizm, sınıfların birbiri gibi davranabilmesi anlamına gelir ve aynı interface arkasına farklı sınıflar bağlanabilir.
- Dicaprim (bağımsızlık), açılan sınıfların mümkün mertebe birbirinden bağımsız olması prensibidir.
- Lose dicaprim, iki sınıf birbirine bağlı olacaksa bile ara katman aracılığıyla bağlanması gerektiğini ifade eder.
- 47:15Debug Sürecinde Karşılaşılan Sorunlar
- Bazı kullanıcılar interface'i açtığında içinde kod olmadığını, ancak program çalıştığında altında kod gördüğünü belirtmişlerdir.
- Debug sırasında interface'de değil, interface'in arkasına takılmış sınıfın kodunu görüyoruz.
- Bazı kullanıcılar aynı kodu çalıştırdığında farklı kodlar görerek şaşkınlık yaşamıştır, bu durum hiyerarşideki farklı sınıflardan kaynaklanmaktadır.
- 48:28Hiyerarşik Yapılar ve Süper Kullanımı
- Kodda "super" veya "this" gibi ifadeler gördüğünüzde, orada hiyerarşik bir yapı olduğunu anlamanız gerekir.
- "Super" ifadesi, o anki sınıfın kendisini değil, hiyerarşideki üst sınıfı ifade eder.
- Bir sınıfın hangi sınıflar tarafından kullanıldığını görmek için, o sınıfın geçtiği tüm yerleri bulabilirsiniz.
- 50:28Sınıf İçi Sınıf Kullanımı
- Bir sınıf içinde başka bir sınıfın kodunu çağırmak, "composition" olarak adlandırılır.
- Dinamik olarak çağrılan sınıfları bulmanın yolları vardır.
- 51:37Mimari Örneği
- Sistemde bir interface ve tek bir metot bulunur, bu metot aldığı tüm değerleri parametrik olarak alabilir.
- Z'li bir tabloda, hangi noktada hangi sınıfın çağrılacağı konfigüre edilebilir şekilde yönetilir.
- ZCL sınıfı, bu dünyayı yönetmekten sorumlu ortak bir sınıftır.
- 53:52Kod Paketleme ve Sınıflandırma Sistemi
- 45 AFZZ kodu, gelen parametreleri paketleyip belirli sınıflara yönlendiriyor.
- Sistem, tabloda ilgili sınıfları bulup sırayla gezdirerek değişiklik yapılabilen değişkenlerin değiştirilmiş hallerini geri bırakıyor.
- Bu sistem sayesinde kullanıcılar basitleştirilmiş bir arayüzle çalışabiliyor ve 5000 satır kod yerine sadece gerekli değişiklikleri yapabiliyorlar.
- 55:00Sistem Avantajları
- Sistemde yapılan değişiklikler canlıya tek seferde atılabiliyor ve hatalar yarım kalmış işler haline gelerek sistem üzerindeki etkisini sınırlıyor.
- Sadece yabancı müşteriler için hata olursa bile, yerli müşterilerin siparişleri kaydolmaya devam ediyor ve hatanın etkisi küçülüyor.
- Bu altyapı, SAP'ta bulunan WE-BODY altyapısından esinlenerek geliştirilmiş ve sistem ilk günden itibaren uygulanmaya başlanmış.
- 56:55Sistemdeki Sorunlar ve Çözümleri
- Sistemdeki tek eksik, bir sınıfın hangi kod tarafından çağrıldığı hemen bulunamaması ve bu nedenle daha kademeli bir araştırma gerektirmesi.
- Entegrasyon altyapısında da benzer bir mantık kullanılmış, farklı işlevleri yapan farklı interface'ler oluşturulmuş.
- Veri okuma, kayıt atma, Q ve parsel mantığı gibi farklı işlevleri yapan interface'ler sistemi yönetiyor.
- 58:19Entegrasyon Altyapısı
- Tüm entegrasyonlar için veri okuma interface'i uygulanmak zorunda ve bu interface tek bir yerden yönetiliyor.
- Delta veri göndermek için bir abstract sınıf açılmış, entegrasyonların en son hangi tarih saatte çalıştığını merkezi bir tabloda takip ediyor.
- Başarılı okumalar durumunda tarih saat güncelleniyor, başarısızlıklar durumunda ise tarih saat kalıyor.
- 1:00:51Kod Tanımlama Kriterleri
- Kodda metod isminde tilda (~) işareti görüldüğünde, bu mutlaka bir interface metodudur.
- SAP, tilda işaretini interface metodlarını tanımlamak için kullanıyor.
- Kodda tilda işareti gördüğünüzde, bir interface uygulanmış ve o interface'in bir metoduna bakıyorsunuz anlamına geliyor.
- 1:02:12Instance ve Statik Metotlar
- Bir sınıfın yordamları publi ve private olabilir, ayrıca instance metot ve statik metot olarak da ayrılır.
- Instance metot, bir sınıftan oluşturulan her obje için ayrı hafıza alanına sahip olan metotlardır.
- Statik metotlar ise, sınıfın birden fazla kopyasında da olsa ortak bir hafıza alanında tutulan ve paylaşılan metotlardır.
- 1:05:05Instance ve Statik Metotların Kullanımı
- Tek çizgili ok (->) normal instance değişkenlerine veya metodlarına erişim sağlar.
- İki çizgili ok (::) statik metodlara veya değişkenlere erişim sağlar.
- Statik değişkenler, birden fazla sınıf kopyasında da olsa aynı veriyi paylaşmak için kullanılır, örneğin malzeme verisi gibi.
- 1:06:39Örnekler ve Kapanış
- Özel token, super ve tilda gibi kavramlar da bu konuyla ilgilidir.
- Eğitimin sıkıştırılmış olması nedeniyle bir gün kümesi haline geldi.