Nesne Tabanlı Programlama #8 - Nesne Kopyalama Davranışları | Shallow Copy | Deep Copy

  Рет қаралды 17,477

Gençay Yıldız

Gençay Yıldız

Күн бұрын

Пікірлер: 84
@ertanciller1924
@ertanciller1924 2 жыл бұрын
Resmen öğretmenliği sanat olarak icra ediyorsunuz hocam. Geç keşfettim sayfayı ama iyi ki keşfettim. Her zaman böyle hocalara karşı çok büyük saygım olmuştur çok rahat çok profesyonel 👏
@esmaicer845
@esmaicer845 2 жыл бұрын
keşke üniversitedeki akademisyenler de şu videoları izlese.
@Algotrader04
@Algotrader04 Жыл бұрын
izleselerde bir iki bişey katsqalar kendilerine
@tugba7777
@tugba7777 Жыл бұрын
hocam sizin gibi hocam olsa üniversiteden çıkmam o derece bağladı beni anlatımınız ve cidden aşırı açık net bir anlatım herkes anlayabilir bu çok değerli bir şey :) ve sizi pazar keşfettim bugün salı ve keşfettiğim günden beri sadece sizden çalışıyorum ve anlayarak tane tane ilerliyorum birkaç günde 2 senede öğrenemediğim şeyleri öğrettiniz büyük değersiniz lütfen vazgeçmeden ister c sharp ister java script vs birçok eğitiminize ve anlatımınıza bizlerin ihtiyacı var bizi yalnız bırakmayın hocam sevgilerr ❤
@fbetasoft
@fbetasoft 3 жыл бұрын
Her anlatacağınız bir zor konuya başlamadan ‘bunu anlamayabilirsiniz belki’ demeniz bile ben gibi sıfırdan başlayan birini acayip rahatlatıyor. Eğer öyle demeseniz büyük ihtimal benim aklım basmıyor diyip pes edebilirdim ama siz böyle söyleyince haa anlamamam normalmiş diyip rahat kafayla izliyorum. Sonrasında dediğiniz gibi anlıyorum her şeyi. Çok süper anlatıyorsunuz. Bazı önemli yerleri de üstüne basa basa tekrar etmeniz çok yararlı oluyor. Çünkü neyin çok önemli neyin az önemli olduğunu bilmiyoruz. Kısacası böyle devam 👏
@yusufscad6429
@yusufscad6429 2 жыл бұрын
Bir şeyleri bu kadar güzel anlatan sayılı kişilerden birisiniz Allah da sizden razı olsun Hocam teşekkürler
@ayvazyasin8175
@ayvazyasin8175 Ай бұрын
Emeğine sağlık hocam katkınız çok büyük.
@hunterwaxsel
@hunterwaxsel 4 жыл бұрын
her dersinizde bir aydınlanma yaşıyorum :)
@erdemeder4613
@erdemeder4613 3 жыл бұрын
Videolar birer altın değerinde, çok anlaşılır bir video serisi olmuş elinize sesinize sağlık
@holdbar609
@holdbar609 2 жыл бұрын
Hocam yaklaşık iki yıl boyunca Unity ile ilgilendim. Boşa kürek çekiyormuşum gerçekten. Ne temel C# oturmuş ne de OOP bilgim var kalkmış oyun yapmaya çalışıyorum. Bir de MMORPG yapmayı düşünüyordum tövbe ya rabbim :D Bu kadar derinlemesine anlatarak gözümüzü açtığınız için teşekkür ederim. Şimdi nerede nasıl davranmam gerektiğini ufaktan da olsa anlamaya başladım.
@5ura_999
@5ura_999 9 ай бұрын
Classların deep copy ile çoğaltılmasını tam anlamadım, kalıtımda umarım daha iyi anlarım. Çünki çok iyi anlatıyorsunuz, teşekkür ederiz hocam. Emeğinize sağlık. Böyle bir eğotimden faydalandığım için çok şanslı hiss ediyorum🌷❤
@mucahidcanbey
@mucahidcanbey 2 жыл бұрын
Aklımdaki her soruyu okuyorsunuz hocam 🙏
@muratceniklioglu1968
@muratceniklioglu1968 2 жыл бұрын
Çok güzel anlatım.
10 ай бұрын
Eyvallah hocam, ağzınıza sağlık, teşekkürler.👍👍👍
@oguzylmaz6412
@oguzylmaz6412 3 жыл бұрын
Hocam bu konuyu üniversitede algoritma dersinde anlamazdım sayenizde öğrendiğimi hissettim öyle diyeyim bu kadar kolaymış meğer çok teşekkürlerler :)
@mehmetacar51
@mehmetacar51 Жыл бұрын
Güzel eğitimler için teşekkürler.
@husokanus
@husokanus 2 жыл бұрын
Ağzınıza sağlık hocam. Emeğiniz için çok teşekkürler
@cuneytdonmez214
@cuneytdonmez214 9 ай бұрын
Emek çok büyük..Efsane anlatım
@mfakkaya
@mfakkaya 4 жыл бұрын
Siyah arka plan çok daha anlaşılır olmuş teşekkürler. Bazı yazılar hâlâ çok küçük hocam şahsen zorlanıyorum.
4 жыл бұрын
Tamam, sonraki dersler de biraz daha büyütürüm :)
@nurisargin
@nurisargin 2 жыл бұрын
Çok faydalı bilgiler, emeğinize sağlık hocam.
@ozelharekat571
@ozelharekat571 9 ай бұрын
emeginize saglik
@necipakgz
@necipakgz Жыл бұрын
Deep copy = Koyunu kopyaladığınızda, birini kebap yapınca diğerinin canı yanmıyorsa bu deep copydir 🤣 Sınavda vs çıkınca yazın gidiş yolundan 100 alırsınız 😂 güzel örnek.
@emirarslanca9364
@emirarslanca9364 4 ай бұрын
Ders değil bu. Bu bir sanat.
@hikmetfazila6299
@hikmetfazila6299 2 жыл бұрын
emeğinize sağlık hocam, teşekkürler
@kenanyasar1066
@kenanyasar1066 Жыл бұрын
Allah razı olsun.
@EmreCanTERKAN
@EmreCanTERKAN 6 ай бұрын
Tekrara devam :)
@YellowedLeaves65
@YellowedLeaves65 Жыл бұрын
Ders böyle anlatılır!
@NcKrkllkc
@NcKrkllkc Жыл бұрын
Hocam MemberwiseClone() işleminin sonucunda yaptığımız deep copy tam olarak deep copy olmuyormuş. Biraz araştırma sonucunda şöyle bir bilgiye ulaştım. Eğer ki iki nesne referansı arasında MemberwiseClone işlemi uygulanıyorsa, değer türündeki değerler (staticler hariç) bit bit kopyalanıyor, yani deep copy gerçekleşiyor. Fakat referans türündeki değerler için bu söz konusu değil. Örneğin sınıfın içerisinde bir dizi olsun. MemberwiseClone ile yaptığınız kopyalama işlemi sonucunda değer türlü verilerinizin bir kopyası, kopyalanan nesne referansından bağımsız bir şekilde yeni referansa aktarılıyor ama bu durum dizi için geçerli olmuyor. İki nesne referansı da aynı diziyi referans göstermeye devam ediyor. Dizi üzerindeki değişikliği hangi nesne referansı üzerinden yaparsanız yapın aynı diziyi işaret ettiği için değişiklikler ortak oluyor. ---------------------------------------------- class Deneme { public int sayi; public int[] sayilar = {1,2}; public Deneme MemwisClone() { return (Deneme)this.MemberwiseClone(); } } Deneme d1 = new Deneme(); Deneme d2 = d1.MemwisClone(); d1.sayi = 5; // Diğer referanstan bağımsız değer ataması yapılır. d2.sayi = 10; // Diğer referanstan bağımsız değer ataması yapılır. Console.WriteLine(d2.sayi); // Çıktısı : 10 Console.WriteLine(d1.sayi); // Çıktısı : 5 d1.sayilar[0] = 10; //d1 üzerindeki dizi elemanı değişikliğinden, d2 deki dizi de etkileniyor. d2.sayilar[1] = 20; //d2 üzerindeki dizi elemanı değişikliğinden, d1 deki dizi de etkileniyor. Console.WriteLine($"{d1.sayilar[0]} - {d1.sayilar[1]}"); // Çıktısı : 10 - 20 Console.WriteLine($"{d2.sayilar[0]} - {d1.sayilar[1]}"); // Çıktısı : 10 - 20 ---------------------------------------------- Nesne içerisindeki üyeler tamamen birbirinden bağımsız bir şekilde kopyalansın istiyorsanız ya kendi copy metodunuzu yazacaksınız, ya da serileştirme yapısını kullanacaksınız. En azından internette bulduğum çözümler bunlardı. Aşağıda kendi copy metodumu oluşturdum. Sıfırdan nesne oluşturmak yerine, kopyalama sırasında kopyalandığı nesnenin özellikleriyle yaşam döngüsüne başlamasını istedim. O yüzden bu şekilde kodladım. Umarım ne yapmak istediğimi anlatabilmişimdir :) ---------------------------------------------- class Deneme { public int sayi; public int[] sayilar; public Deneme(int sayi = default(int), int[] sayilar = default(int[])) { this.sayi = sayi; this.sayilar = sayilar ?? new int[]{1,2}; } public Deneme Copy() { return new Deneme(this.sayi, this.sayilar.ToArray()); } } Deneme d1 = new Deneme(); Deneme d2 = d1.Copy(); Console.WriteLine(@$"---------- d1 ve d2 ilk oluşturmadan sonra ---------- d1 sayi : {d1.sayi} d2 sayi : {d2.sayi}"); d1.sayi = 5; Console.WriteLine(@$"---------- d1 sayi değişkeninin değeri değiştirildikkten sonra ---------- d1 sayi : {d1.sayi} d2 sayi : {d2.sayi}"); Console.WriteLine("Sadece d1'in sayi değeri değişti. Birbirlerinden bağımsızlar. "); Console.WriteLine(@$"-------------d1 ve d2 nesnelerinde sayilar dizisi varsayılan değerde---------- d1 sayilar[0] : {d1.sayilar[0]} - d1 sayilar[1] : {d1.sayilar[1]} d2 sayilar[0] : {d2.sayilar[0]} - d2 sayilar[1] : {d2.sayilar[1]}"); d1.sayilar[0] = 10; d1.sayilar[1] = 20; Console.WriteLine(@$"---------- d1 sayilar dizisi değerleri değiştirildikten sonra ---------- d1 sayilar[0] : {d1.sayilar[0]} - d1 sayilar[1] : {d1.sayilar[1]} d2 sayilar[0] : {d2.sayilar[0]} - d2 sayilar[1] : {d2.sayilar[1]}"); Console.WriteLine("Sadece d1'in sayilar dizisindeki değerleri değişti. Birbirlerinden bağımsızlar. "); Çıktısı: ---------- d1 ve d2 ilk oluşturmadan sonra ---------- d1 sayi : 0 d2 sayi : 0 ---------- d1 sayi değişkeninin değeri değiştirildikkten sonra ---------- d1 sayi : 5 d2 sayi : 0 Sadece d1'in sayi değeri değişti. Birbirlerinden bağımsızlar. -------------d1 ve d2 nesnelerinde sayilar dizisi varsayılan değerde---------- d1 sayilar[0] : 1 - d1 sayilar[1] : 2 d2 sayilar[0] : 1 - d2 sayilar[1] : 2 ---------- d1 sayilar dizisi değerleri değiştirildikten sonra ---------- d1 sayilar[0] : 10 - d1 sayilar[1] : 20 d2 sayilar[0] : 1 - d2 sayilar[1] : 2 Sadece d1'in sayilar dizisindeki değerleri değişti. Birbirlerinden bağımsızlar.
@emreesencomtr_
@emreesencomtr_ 9 ай бұрын
Allah razı olsun Hocam
@osmansahin9526
@osmansahin9526 Жыл бұрын
Hocam Hilmi diye arkadaşınız var sanırım. Ona da laf arasında keçi demiş oldunuz gibi hissettim :D ( derin kopyalama keçi dolly örneğinde). Eğer varsa Hilmi kardeşimize de selamlar :D
@batuhan-birinci2115
@batuhan-birinci2115 2 жыл бұрын
Süperdi hocam emeğinize sağlık..
@batuhansevgil
@batuhansevgil 4 жыл бұрын
Hocam sayenizde yaptığım şeyleri nasıl yaptığımı ve olayın mantığını anlıyorum bu sayede daha çok OOP konusunda güçleniyorum
@mirelemapps7307
@mirelemapps7307 4 ай бұрын
Nasil uye olabilirim butonu bulamiyorum
@batuhansevgil
@batuhansevgil 4 ай бұрын
@@mirelemapps7307 farklı ülkedeysen vpn ile türkiyeye bağlanıp deneeyebilirsin.
@muhammedzayif3127
@muhammedzayif3127 4 жыл бұрын
Gene harika örnekler. Devam
@tanerustun240
@tanerustun240 2 жыл бұрын
hocam 16:20 deki m1 referansının oluşturduğu ilk objede atama yapıldıktan sonra artık o objeyi herhangibir Referans türü referans etmediğinden garbage collector tarafından temizleniyor mu yoksa ?
@HakanSamir
@HakanSamir Жыл бұрын
Teşekkürler
@____han____
@____han____ 2 жыл бұрын
Hocam dakika 29'da anlattıgınız clone işlemi yerine klasik şekilde new Myclass() desek aynı sekilde yeni bir myclass türünden bir nesne yaratılmaz mıydı yani; " 34) MyClass m3 = m1.Clone(); " bunun yerine " 34) MyClass m3 = new MyClass " bu ikisi arasında fark var mıdır? hocam soruyu yazarken cevap aklıma geldi:) aslında eğer bu örnekte m1 nesnesinde bir değişiklik yapmadıysak evet iki işlemde aynı oluyor temel bir myclass türünden nesne oluşturuyor ama biz m1'de değişiklik yaptıysak ve bunları yeni bir nesneye hazır hemen geçirmek istiyorsak klonlamak isteriz.
2 жыл бұрын
Soruda haklı, cevapta harikasın :)
@____han____
@____han____ 2 жыл бұрын
@ teşekkürler hocam😄
@rockymarciano7623
@rockymarciano7623 11 ай бұрын
Shallow'un ingilizce karşılığı yüzeysel,sığ anlamına gelmektedir. Bu da konuya dair fikir verebilir. Sığ ve yüzeysel bir kopyalamadır shallow copy değer türetilmesini sağlamaz.
@hj1433
@hj1433 3 жыл бұрын
28:20, hocam aslında her nesne object türünden değil mi? O zaman niye object türündeki "this.MemberwiseClone" yapısını MyClass türüne dönüştürdük. evet anlıyorum elimideki sınıfın türü object değil, bilakis MyClass. Esas soru ise burada, niye object değil? sonuçta biz nesne üzerinde çalışmıyor muyuz?
3 жыл бұрын
Polimorfizm konusu gelsin konuşacağız :) Bu sorunun cevabı orada...
@nursedaozcan5854
@nursedaozcan5854 2 жыл бұрын
teşekkürler hocam . road map bekliyoruz
@Merve_Esen
@Merve_Esen Жыл бұрын
Teşekkürler hocam
@ugursesen7629
@ugursesen7629 2 жыл бұрын
en çok hatalar nesne kopyalamada yapılıyor, nelerle karşılaştım nelerle, çok dikkat edilmesi lazım.
@burcutas1647
@burcutas1647 Жыл бұрын
Bu bir destek mesajıdır. Nesne Kopyalama Davranışları | Shallow Copy | Deep Copy
@mertar7594
@mertar7594 2 ай бұрын
hocam oop sonunda proje yapıyormusunuz
@gskirmizi3001
@gskirmizi3001 Жыл бұрын
dün gece arka arkaya 8 video izledim rüyam stack ile heap rüuyama girdi
@hj1433
@hj1433 3 жыл бұрын
Kıymetli hocam, eskisi gibi her gün düzenlice video atmaya ne zaman başlayabilir hale geleceksiniz acaba?
3 жыл бұрын
Yaklaşık 3 aylık yapmış olduğum her gün video çalışması beni inanılmaz yordu ve işleri sıkıştırdı. Yakın zamanda işlerimi yoluna koymuş olacağım lakin artık her gün değil, haftanın belirli günleri yayın yapmayı düşünüyorum.
@hj1433
@hj1433 3 жыл бұрын
@ Hmm. Peki hocam. Allah kolaylıl versin. Bu süreçte sizin temel prosüdürel ve nesne tabanlı proglamalamada henüz videosunu yüklemediğiniz ama benim mutlaka öğrenmem gereken bir konu olduğunda bana hangi kanalı izlememi tavsiye edersiniz? Birçok kanal var; lakin ben, izlemek istediğim öğretim görevlisinde iki şeyin olmazsa olmaz olduğunu gördüm. İlki anlatacağı bilgiyi hazmetmiş olması. İkincisi bunu düzgünce ve anlaşılabilir bir üslupla aktarabiliyor/ öğretebiliyor olması.
3 жыл бұрын
@@hj1433 Kanal takip etmiyorum. Araştırmanı öneririm. Yakında C# ve OOP eğitimlerinin çekimlerine başlayacağım ve bu ikisini özellikle zamanla noktalayacağım.
@hj1433
@hj1433 3 жыл бұрын
@ Çok sağolun hocam. C# eğitiminin 500 küsür videoda biteceğini belirttiniz. Peki OOP tamamı yaklaşık olarak hangi videoda bitecek acaba?
@yazilimciyizBiz
@yazilimciyizBiz 3 жыл бұрын
08.01.2022 tarihinde izledim
@viabelli8253
@viabelli8253 2 жыл бұрын
Hocam çok güzel bir video olmuş ama benim aklıma takılan küçük bir soru var. Biz Clone metodunda this.MemberwiseClone() diyerek return etmek yerine direkt; return this; yapsak olur muydu?
Жыл бұрын
Hayır, this o anki nesneyi döndürür. Klonunu değil.
@recepcakir4866
@recepcakir4866 Жыл бұрын
'MemberwiseClone' methodunun açıklamasında 'Creates a shallow copy' ifadesi yer alıyor ama siz deep copy yorum satırı yazdınız yanına, burada bir yanlışlık yapmış olabilir misiniz?
Жыл бұрын
Olabilir tabi. İlk fırsatta göz atacağım.
@talhagozutok
@talhagozutok 11 күн бұрын
Hayır, bir yanlışlık yok fakat eksik var. Videoda anlatılan tam olarak deep copy değil. Deep copy olması için nesnenin birebir kopyasının oluşturulması gerekiyor. Yani, nesnenin field ve property'lerinin de birebir kopyalanması gerekiyor. Videoda eksik olan field ve propertylerin referans tipli olabileceğinden onların da kopyalanmasına değinilmemesi. Düşünüyorum ki Gencay hocamız, videoda bahsettiği ve öğrettiği nesne kopyalama terimlerini kavradıktan sonra, ihtiyaç duyduğunuzda bu konuyu kavramlar üzerinden araştırarak daha derinlemesine öğrenebileceğinizi düşündüğü için bu detaya değinmemiş olabilir. MemberwiseClone evet bir shallow copy oluşturur. Oluşan bu shallow copy'i dikkat edersek Clone methodu içinde return ile dönüyoruz. MemberwiseClone, RAM'de yeni bir nesne oluşturur. Oluşan bu yeni nesneyi videodaki gibi m3 referansı ile gösterirsek bunun bütününe deep copy diyebiliriz. Bu güzel soru için teşekkür ederim. --- Kaynak: learn.microsoft.com/en-us/dotnet/api/system.object.memberwiseclone#remarks If a field is a value type, a bit-by-bit copy of the field is performed. If a field is a reference type, the reference is copied but the referred object is not; therefore, the original object and its clone refer to the same object.
@kemalsen96
@kemalsen96 2 жыл бұрын
Hocam Hilmi adını çok kullanıyorsunuz. Hilmiyle alakalı var mı bir hikayeniz? :D
2 жыл бұрын
Dayım olur kendileri :)
@elgizhasanzada
@elgizhasanzada 3 жыл бұрын
The best explanation i have ever seen so far >_
@crofsencrof8415
@crofsencrof8415 Жыл бұрын
Kıymetli hocam, MemberwiseClone metodu shallow copy yapmıyor mu ? m3'teki değişiklik, m1 ve m2 referanslarınıda etkiliyor.
Жыл бұрын
Örnek kod?
@crofsencrof8415
@crofsencrof8415 Жыл бұрын
@ Çok özür diliyorum hocam hata benden kaynaklı. Videodaki örneğinizi denemek için class içerisinde array dizisi oluşturdum. İlk nesne üzerinden bu array dizisine ulaşıp bir kaç değer ekledim. Sonra clone işlemi yaptıktan sonra cloneladığım nesne içindeki array dizisinede aynı index numaraları üzerinden eleman eklemesi yaptım. Eee tabi doğal olarak ilk nesnedeki array dizisinin elemanlarıda değişti çünkü heapteki array dizisi clonelanmadı aynı duruyor yani iki nesne içerisindeki array dizisi aynı kalıyor. Nesne içerisine değer türü değişkenler ekleyip onlar üzerinden bi deneme yaptığımda nesnenin kopyalandığını gördüm :). MemberwiseClone'nun summary açıklamasındaki "This is always a shallow copy of the instance" açıklaması kafamı karıştırdı en başta. Nesne kopyalama söz konusu fakat summary açıklamasına görede tam bir Deep Copy yapmıyor sanırım hocam bu metot.
@mirelemapps7307
@mirelemapps7307 4 ай бұрын
Nasil uye olabilirim butonu bulamiyorum
@industriousBurak
@industriousBurak 4 жыл бұрын
Hocam C# a devam edebilir misiniz
@QowqarAsgerov
@QowqarAsgerov Ай бұрын
👏👏👏👏💫💫
@ahmetcam2346
@ahmetcam2346 Жыл бұрын
@UBAzerbaijan
@UBAzerbaijan 2 жыл бұрын
Hocam siyah ekrana geçmişsiniz )
@erenxewneztuten6435
@erenxewneztuten6435 2 жыл бұрын
Shallow Copy matematikteki fonksiyonların özelliğini birebir kopyalamış xD. Nerde kullanacağız dediğimiz matematik özelliğinin nerede kullanılacağını öğrendik.
@codiore
@codiore 2 жыл бұрын
Hocam as operatörü ile de yapabilirdik. Hemen sizin ders notlarından aklıma geldi :) Tabi performans konusunda bir şey bilmiyorum :) Çok teşekkürler... return this.MemberwiseClone() as MyClass;
@irem841
@irem841 4 ай бұрын
ctrl x + ctrl v= shallow copy ctrl c + ctrl v = deep copy yaksamlar...
@fatihkesik4731
@fatihkesik4731 3 жыл бұрын
Level atlamış gibi hissediyorum.
@max_snowtr
@max_snowtr Ай бұрын
Hilmi
@Batuhansevdirir
@Batuhansevdirir Жыл бұрын
Destek +
@oguz231
@oguz231 2 жыл бұрын
Hilmi dayıya ayıp oldu sanki hocam
@aciltedarikdeposu4326
@aciltedarikdeposu4326 2 жыл бұрын
bu videoya kadar en sevdiği yeğeniydi :D:D:D
@musayilmaz4815
@musayilmaz4815 3 жыл бұрын
Doli mi Hilmi mi 😂
3 жыл бұрын
birini kesip kebap yapmak :D
@burakkaracakaya6763
@burakkaracakaya6763 Жыл бұрын
this.MemberwiseClone ile new MyClass mı yapmış olduk yani Gencay hocam? Sonuçta o method ile yeni bir nesne türetilmiş oldu, değerleri her ne kadar m1 ile aynı olsa da..
Nesne Tabanlı Programlama #9 - Derinlemesine Encapsulation Nedir?
20:24
Gençay Yıldız
Рет қаралды 17 М.
Nesne Tabanlı Programlama #16 - Inheritance(Kalıtım) Nedir? 1. Bölüm
55:52
Shallow and Deep Copy in C++
12:56
Codearchery
Рет қаралды 109 М.
Mikroservis Mimarisi Nedir?
15:48
Gençay Yıldız
Рет қаралды 10 М.
Nesne Tabanlı Programlama #26 - Abstraction Kavramı Nedir?
46:14
Gençay Yıldız
Рет қаралды 11 М.