Nesneye Dayalı Programlama
-
Bilgisayar mühendisliği 3. sınıfa geçtim hala bunun mantığını oturtamadım.C ve java bilgim iyi ama bi program yazarken hangi nesneleri oluşturucam karar veremiyorum.Nesneye dayalı kavramlar vs dersler gördük ama sadece hikaye kısmını öğrettiler.nesneye dayalı programlamayı tam olarak oturtmak için kaynak vs önerisi veya mantığını anlamak için şu programı yaz gibi önerisi olan varsa bekliyorum
-
BarisYigit'e ulaş "Erhan hocanın nesne yönelinli programlama için hazırladığı efsane bir ppt-pdf"'i var onu iste. Onu oku olayı çözersin kesin.
-
aynı sorun bendede var takır takır kod yazıyom ama hala nesneye dayalı programlama ne deseler cevaplayamam :D
-
benim anladığım şu hacı
mesela bir bina yapacaz ne yapariz
1.katı çiz
2.katı çiz
3.katı çiz
.....
53. katı çiz
kodlama ile örnek verecek olursak
kat[1]=çizim.kat1
kat[2]=çizim.kat2
kat[3]=çizim.kat3
kat[4]=çizim.kat4
.....
kat[53]=çizim.kat53
bütün katların planı aynı ise katların hepsini çizmeye gerek varmı
1 tane ortak plan çizer
for(int i=1;i<=53;,i++)
{
kat[i]=plan;
}
mantık bu sanırım
bende konuyu takipteyim merak ediyorum detayları :D
-
Object Oriented Programming Concept leri olan
Polymorphism
Inheritance
Encapsulation
Abstract Class
Interface
gibi kavramların ne olduğunu ne fayda sağladığını öğrenip iyice anlayın, daha sonra bu faydalardan yararlanırken farkında olmadan OOP e girmiş olacaksınız.
En basit haliyle insanların kişisel bilgisini tutan bir uygulamanız var.İnsanları iş gruplarına göre sınıflandıracağız (Marx'ın sınıflı toplumu değil =) yanlış anlaşılmasın )
Tasarım aşamasında detaya inmek istemiyorsunuz veya büyük projelerde yönetici pozisyonundaki kişiler bu özellikleri belirleyecek programcılar da detayları halledecek bu durumda Interface ler yazılır.
Interface de sadece değişkenler ve fonksiyon prototipleri bulunur. Mesela;
public int Calis();
private int tcno;
Örneğin İnsan Sınıfını yaratacaksınız ama hiç kimse sadece insan özelliğine sahip olmayacak o yüzden insan sınıfını Abstract Class yapacaksınız. Bu Abstract Class ı ilk olarak yazılan Interface e göre yazacaksınız. Bu ne demek oluyor hiç kimse sadece insan olamayacak ama bu insan sınıfı size kendi üzerinden başka sınıflar yaratma olanağı sağlayacak. İnsan->İşçi İnsan->Memur gibi...
Ahanda tam burda Inheritance devreye girecek Insan Abstract Class ından İşçi Sınıfını İşçi Sınıfından Özel Sektör İşçi, Taşeron İşçi gibi diğer alt sınıfları türeteceğiz. Bunun bize hem sistem tasarımı ve bütünlüğü hem de benzer sınıfların tekrar tanımlanması gibi kolaylıklar sağladığından bahsetmeme gerek yok sanırım.
Şimdi başka bir boyuta sıçrayacağız. Özellikle büyük projelerde her şey iç içe geçtiğinde programcıya sadece ihtiyacı olacak olan kısımları (fonksiyon,değişken,veri yapısı, hatta nesne) sunarsınız, diğer kısımları ise yanlış kullanımlara/değişimlere mahal vermemek ve programcı için detayları minimuma indirgemek için saklarsınız aha bu da Encapsulation dır. Az önce bahsettiğimiz İşçinin TC kimlik no su nesne yaratılırken bir defa oluşturulup sonra da değiştirilmemelidir, bunu nasıl yaparım peki
private int TCNO
derim önce ki class ın dışında erişim olmasın
ilk atamayı Constructor fonksiyon içinde yapacağım için
İşçi(int tc,.......)
{
// this nedir araştırırsınız
this.TCNO = tc;
}
derim ilk sefer set eder sonra bir daha dokunmam. Peki bu TCNO dışardan lazım olacak onu nasıl yapacağız derseniz onu da public bir fonksiyonla halledeceğiz.
public int getTcNo(void)
{
return this.TcNo;
}
gibi bir public getter fonksiyon yazarak bu konuyu da çözerim. Böylece tcno kişi ilk oluşturulurken belirlenecek ve de class ımızı kullanan uygulama tarafından yanlışlıkla da olsa değiştirilemeyecek.
Son olarak ise Polymorphism olayına gelelim.
Şimdi ben bu İnsan denen hayvanın Class ını tanımladım, bunun fonksiyonlarının nasıl çalışacağı ise İnsan türüne göre değişecek ve bunu önceden belirleme şansım yok. O zaman İnsan Class ı içinde diye fonksiyonumu tanımlar içini de boş bırakırım.
public int Calis()
daha sonra İşçi Sınıfına geldiğimde bu fonksiyonu yazarken
public int Calis()
{
It gibi çalış
}
Memur Sınıfına geldiğimde
public int Calis()
{
G*t büyüt
}
gibi gibi fonksiyonları yazarım. Bu da olur Polymorphism.
OOP alışınca bağımlılık yapar, ufacık bi veri yapısı için bile class yazarsınız ki aslında yapılması gereken de budur.
Başka bir örnekle özetlersek
Hayvan sınıfının genel özelliklerini bir Interface ile tanımlarım
Hayvan sınıfını Abstract Class olarak yazarım çünkü hiç bir hayvan sadece hayvan olamaz türü vardır.
Bu sınıftan İnheritance ile Abstract Kedigiller ile türettirim.
Daha sonra Abstract Kedigillerden İnheritance ile Kedi yi ve Kaplan ı türetirim.
Kedinin bazı özelliklerini veya fonksiyonlarını read-only yapmak için veya gizlemek için private protected olarak tanımlar böylece Encapsule ederim. Mesela az sonra kullanacağım FareYakala() fonksiyonu kullanıcı tarafından direk çağrılmayacak.
Kedi.Beslen() fonksiyonu kendi içinden Avlan() fonksiyonunu o da FareYakala() fonksiyonunu çağıracak. Bu durumda programcının görmesi gereken tek fonksiyon Beslen() fonksiyonu. Bu durumda bu fonksiyonları
public void Beslen(){.....}
private void Avlan() {.....}
private void FareYakala(){......}
şeklinde tanımlarım.
Son olarak da Kedigillerin içi boş olan Avlan() fonksiyonunu kedi ve kaplan için farklı olacaktır. Kedi için
private void Avlan()
{
FareYakala();
}
Kaplan için
private void Avlan()
{
CeylanYakala();
}
şeklinde tanımlarım, bu da Polymorphism olur.
Atladığım eksik/yanlış belirttiğim bir şey varsa arkadaşlar eklesin bu saatte bu kadar oluyor.
-
wert bunu yazdı:
-----------------------------benim anladığım şu hacı
mesela bir bina yapacaz ne yapariz
1.katı çiz
2.katı çiz
3.katı çiz
.....
53. katı çiz
kodlama ile örnek verecek olursak
kat[1]=çizim.kat1
kat[2]=çizim.kat2
kat[3]=çizim.kat3
kat[4]=çizim.kat4
.....
kat[53]=çizim.kat53
bütün katların planı aynı ise katların hepsini çizmeye gerek varmı
1 tane ortak plan çizer
for(int i=1;i<=53;,i++)
{
kat[i]=plan;
}
mantık bu sanırım
bende konuyu takipteyim merak ediyorum detayları :D
-----------------------------Çok yanlış yerlere girmişsin sen :D
Sscheme güzel anlatmış aslında o 5 başlığı araştırın en önemlisi OOP nin temeli nesne adı üstünde :))
bi console uygulaması açıp bi class oluşturun adı mesela insan olsun
insanin içinde
decimal Boy{get; set;}
int Yas{get; set;}
string Ad{get; set;}
olsun bunlar encapsulation oluyor
eğer oluşturmazsanız default bi construction oluşturur ama biz kendimiz oluşturalım
ctor yazıp 2 kere tab ' a basıp oluşturuyoruz parantezlerin içine parametreleri yazın
public insan(int boy,int yas, int ad)
{
Boy=boy;
Yas=yas;
Ad=ad;
}
napmış olduk int,double gibi bi tip belirlemiş olduk c deki structure gibi
şimdi program.cs e gidip main kısmına
Insan insan = new Insan(2.00,23,"sinusx");
yazarsak insan nesnemizi kullanıma açtık artık insan nesnemizin içindeki fonksiyonlara ve atamalara ulaşabiliriz.
Console.WriteLine(insan.Yas + insan.Boy + insan.Ad);
Yaklasık olarak olay bundan ibaret gerekli her durum için nesne açıp atamaları orda yaparsın
-
bende aynı şeyi demeye çalıştım ama olmadı :D
-
wert bunu yazdı:
-----------------------------bende aynı şeyi demeye çalıştım ama olmadı :D
-----------------------------seninkine örnek olarak şey olur mesela senin bina diye bi classın olur diyelim binada neler var katlar katlarda odalar var
Bina bina = new Bina(14); diyelim 14 katlı demin dediğim gibi kat sayısını yapıcı fonksiyonda tanımlayalım
bina.renk = "mavi"; olur mesela
biz binayı boyadığımızda direk bina sınıfımızdan rengi değiştirebiliriz böylece
mesela binaya kat eklensin kaçak bide bina sınıfımızda void KatEkle(int x) {Kat += x} olsun
bina.KatEkle(1); dersin bi kat daha eklenir vs vs :)
-
Önce structure'dan başlamalı sanırım...
-
ltcelik bunu yazdı:
-----------------------------Önce structure'dan başlamalı sanırım...
-----------------------------struct yapısı C kullananlar için faydalı olur ama diğer dilleri kullanan arkadaşlar için çok da gerekli değil.
-
Bi ton karışılık olmuş temizliyorum mesajı.
OOP'un teori kısmında c'deki structure'lara bakarak , memoryde ne yaptığını öğrenmek daha iyi olabilir.Fakat oop kullanımı konusunda yapılacak en net iş sınıflarla çalışmaktır.
OOP'un bütün özelliklerini kullanacağın en güzel iş bir oyun tasarlamak.Net şekilde oturur.