C ile OOP ( Object Oriented Programming ) nasıl yapılır?

Başlatan gerbay, 13 Ekim 2016, 18:06:47

gerbay

girişte pano da yazışıyorduk da gelip buraya da konusunu açayım dedim.

arkadaşlar kullanmasanız bile en azından ne olduğunu bildiğiniz Arduino, mbed gibi platformların arkasındaki güç C++ dili ile yazılmış kütüphanlerdir. C++ ın çıktığı yer e doğru gidecek olursak da C ile yapılan bir programlama tekniği karşımıza çıkar.

Object Oriented Programing (OOP) ya da Nesne Yönelimli Programlama (NYP) konsepti C++ da yerleşik olarak desteklenir. C de ise bunu emüle edebilirsiniz.

OOP yaklaşımı önemlidir, çünkü karmaşık projeler yapmayı daha kolaylaştırır.

Alıntı Yap
1960'lı yılların sonuna doğru ortaya çıkan bu yaklaşım, o dönemin yazılım dünyasında beliren bir bunalımın sonucudur. Yazılımların karmaşıklığı ve boyutları sürekli artıyor, ancak belli bir nitelik düzeyi korumak için gereken bakımın maliyeti zaman ve çaba olarak daha da hızlı artıyordu. NYP'yi bu soruna karşı bir çözüm haline getiren başlıca özelliği, yazılımda birimselliği (modularity) benimsemesidir. NYP ayrıca, bilgi gizleme (information hiding), veri soyutlama (data abstraction), çok biçimlilik (polymorphism) ve kalıtım (inheritance) gibi yazılımın bakımını ve aynı yazılım üzerinde birden fazla kişinin çalışmasını kolaylaştıran kavramları da yazılım literatürüne kazandırmıştır. Sağladığı bu avantajlardan dolayı, NYP günümüzde geniş çaplı yazılım projelerinde yaygın olarak kullanılmaktadır.

Alıntı Yap
NYP'nin altında yatan birimselliğin ana fikri, her bilgisayar programının, etkileşim içerisinde olan birimler veya nesneler kümesinden oluştuğu varsayımıdır. Bu nesnelerin her biri, kendi içerisinde veri işleyebilir, ve diğer nesneler ile çift yönlü veri alışverişinde bulunabilir. Hâlbuki NYP'den önce var olan tek yaklaşımda (Yordamsal programlama), programlar sadece bir komut dizisi veya birer işlev (fonksiyon) kümesi olarak görülmektedirler.

"Yordamsal programlama" denilen yöntem "prosedürel programlama" da dediğimiz ve forumda bir çok arkadaşın da kod yazdığı yöntemdir.

OOP dan önce kullanılan yöntemlerde yazılım karmaşıklaştıkça bakım maliyeti üstsel olarak artmaktadır.



OOP bu soruna çözüm getirmiştir.

C++ bilmeyen forum üyeleri için de C ile nasıl OOP yapılır sorusunun cevabı şurada anlatılıyor;

http://www.state-machine.com/doc/AN_Simple_OOP_in_C.pdf

C bilen arkadaşlar burada anlatılan mevzuyu anlayıp teknik olarak kullanabileceklerini düşünüyorlarsa kolaylıkla C++ a geçebilirler..

Cemre.

Hocam ben dökümandaki örnekleri deneyip üzerinde oynamak istiyorum, PC'de code::blocks 16.01 yüklü, C Console projesi açsam olur mu?

MC_Skywalker

Proje açmana gerek yok. C dosyanı herhangi bir editörle oluştur.  ve derleyici le konsolda derle.

X-Fi

Benim tavsiyem DevC++ ile MinGW compiler beraber kurup oradan öğrenmen bu ikisi ile bilgisayarda FreeRTOS u bile çalıştırabilirsin.

Daha önce denemiştim http://i.hizliresim.com/dXdODQ.jpg
http://www.coskunergan.dev/    (Yürümekle varılmaz, lakin varanlar yürüyenlerdir.)

mufitsozen

Alıntı yapılan: gerbay - 13 Ekim 2016, 18:06:47
girişte pano da yazışıyorduk da gelip buraya da konusunu açayım dedim.

Baskalarinin acitigi basliklara yazmiycam diye kendime soz v eriyorum, sonra boyle cumleler gorup dayanamiyorum

sevgili @gerbay bu forumda:

  • Din
  • Politika
  • Futbol
  • Dillerin karsilastirilmasi : ASM - C -Pbasic - Delphi vb
  • Veri yapilari (Datastructures) - bagli listeler (linked lists)
  • Alayli - Mektepli yada Muhendis - Tekniker

karsilastirmasinin en ufacik imasini iceren basliklar en fazla 8 mesaj sonra Anani, Muptezel Peze..., motunu mik...im, Muhatabim değilsin, Haddini bil, Kafir, dinsiz  filan seklinde seviyeli tepismelere donuyor.

LUTFEN sende bu olguyu idrak et ve dikkatli ol.

Actigin baslikta verdigin AN bastan sona bagli listeler VEDE C dili- C++ filan karsilastirmali. Arkadas bu forumdan atilmakmi istiyorsun, Uyelere garezinmi var? Isteyen zaten ogrenir, baska isinmi kalmadi?

En iyisi sen su ayin karanlik yuzundeki uzaylilarin ussu gercekmi değilmi onu anlat.  :P
Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

mufitsozen

Vayyyt "Ates Serbest" ha!!

o zaman forumdaki sessiz cogunluk icinde bu konuyla ilgilenenlere bir onerim olacak. Biraz eski olmasina ragmen  C++'da kullanilan yapilari ve nasil implement olduklarini aciklayan "inside the c++ object model" diye meshur stanley lippman'in kitabi var. Bunun 1996 1. baskisinin pdf/chm kopyalari internetde bulunabiliyor (bulamayanlar OM ile benden isteyebilirler) Ama ben 1998'de yapilan 2. baskiyi bulamadim. Konu ile alakamda sadece merak seviyesinde oldugu icin satin almak istemedim. AMMA bu ebook'u bulan birisi olur ise aradigi yada isteyebilecegi baska bir konudaki herhangi bir ebook ile degis tokus yapmak isterim  ;)

Zannimca @Klein gibi uyeler bu kitabi cok faydali bulacaktir.

Aptalca bir soru yoktur ve hiç kimse soru sormayı bırakana kadar aptal olmaz.

muhittin_kaplan


muhittin_kaplan

ben pek te anlamam bu işlerden, yaz derlesin, oop muş felan iş çıkartıyorsun başımıza.
(hocam yarına attım o işi. )

muhittin_kaplan

Benim OOP dan anladığım Nesneler, Sınıflar, Metodlar hocam. Oda c# dan.

muhittin_kaplan

Alıntı yapılan: gerbay - 13 Ekim 2016, 22:58:29
hocam C++ diyordun ya..

bize for dummies kıvamında lazım hocam, ayrıca "sanallaştırmadan", bir proje de kullanmamız lazım, zira gözüyle düşünen bir toplumuz.

baran123

Hocam öncelikle bu güzel paylaşım için teşekkürler :)
Bende çok severim OOP, MOOP :) C# dan olsa gerek.
Tabi C++ da olsa da bildiğim kadarıyla C de bu işler pek yok. (Belkide vardır ?)
C de şöyle enum, structure, union falan filan bayılırım kullanmaya !
Donanımlara böyle kütüphane yapmaya başladım mesela
HTU21D_t HTU21D; // Sıcaklık-nem sensörüdür kendisi
    
HTU21D_Init(&HTU21D);

HTU21D_ReadTempeature(&HTU21D);
        
UART_Write((uint8_t)HTU21D.Temperature);

Bunlar iyi güzel ama C de şöyle bir kullanım mümkün mü ?
uint8_t tmp = HTU21D.ReadTempeature();

baran123

Hocam biraz bişler yapsak takla falan attırsak modifiye etsek de benim dediğim gibi olmaz mı ? :(

RaMu

Güzel konu, takipteyim.

Alıntı yapılan: gerbay - 13 Ekim 2016, 23:04:08
ama hocam "virtual" method olmadan polimorfizim olmaz..  hocam C bilenlere C++ ı anlatmak için arka planda ne olduğunu C ce anlatmış adam. açık, net, kısa ve öz..
Biz C bilmiyoruz ki,
C kullanıyoruz, hem kelliğede iyi geliyormuş,
saç baş yoldurmuyormuş.

Önce C yi tam öğrenebilsek,
kendimden söyleyeyim,
Deitelin kitabından bir girmiştim olaya,
kaç yüz sayfa kitap,
baba oğul yazmışta yazmışlar,
üşendim pek bir şey öğrenemedim,
İngilizcem iyide, C ancak kendime yetecek kadar.

@muhittin_kaplan hocamla aynı düşünüyorum,
biz kasap olabilen kedilerdeniz,
uygulamalı görsek yeter.
Sorularınıza hızlı cevap alın: http://www.picproje.org/index.php/topic,57135.0.html

muhittin_kaplan

c bilmeden c# öğrenebiliyorsak, ASM bilmeden C öğrenebiliyorsak, C bilmeden de C++ öğrenebiliriz.


mesaj birleştirme:: 13 Ekim 2016, 23:53:08

"forum üzerinden başka türlü olmaz.."

olur Örnek STM ve z.

siz bir plan dahilinde gidersiniz öğrenmek isteyen takip eder.

baran123

Alıntı yapılan: gerbay - 13 Ekim 2016, 23:50:20
yazdığım gibi olmasında ne sakınca var. sizi rahatsız eden nedir?

@RaMu

hocam hangi kısmını uygulamalı görmek istiyorsunuz ki?

o zaman yüzlerce uygulama yapmak lazım.

daha önce şunu bunu öğrenelim diye açılan konular için örüşüm şudur;

açarsınız kaynakları öğrenmeye çalışırsınız, anlamadığınız yerleri forumda sorarsınız, tartışılarak açıklanmaya çalışılır.

forum üzerinden başka türlü olmaz..
Yok hocam sadece meraktan :)
Hocam beni gece gece nelere bulaştırdınız. :D
Ne yapıyorum ben ya ?
/* 
 * File:   main.c
 * Author: Baran EKREM
 * Created on 13 Ekim 2016 Perşembe, 23:40
 */
#include <stdio.h>
#include <stdlib.h>

typedef unsigned char uint8_t;

typedef struct {
    int (*ReadTempeature)(struct _HTU21D_t *self);
    uint8_t tmp;
    uint8_t hum;
} HTU21D_t;

static void HTU21D_ReadTempeature (HTU21D_t* HTU21D) {
    HTU21D->tmp = 50;
    return 0;
}

static void HTU21D_Init (HTU21D_t* HTU21D) {
    HTU21D->ReadTempeature = &HTU21D_ReadTempeature;
}

int main (void) {
    HTU21D_t HTU21D;
    
    HTU21D_Init(&HTU21D);
    
    (HTU21D.ReadTempeature)(&HTU21D);
    
    printf("Temp : %d", HTU21D.tmp);
    
    for (;;) {
        
    }

    return (0);
}

// Output : Temp : 50