Forum TR
Forum TR
Go Back   Forum TR > Eğitim > Üniversiteler...
ForumTR'ye Reklam Vermek İçin Tıklayınız: network@frmtr.com
Üniversiteler... Üniversitelerdeki Sorunlarınız, Ödevleriniz, Tezleriniz ve benzeri konularda paylaşımda bulunabileceğiniz bölüm...

Cevapla
 
Konu Araçları
Eski 09-04-08, 04:04   #1 (permalink)
Yabancı
 
Giriş Tarihi: 09-04-2008
Mesajlar: 1
Rep Puanı: 2375
ahmet6761 Rütbe: Artı 11ahmet6761 Rütbe: Artı 11ahmet6761 Rütbe: Artı 11ahmet6761 Rütbe: Artı 11ahmet6761 Rütbe: Artı 11ahmet6761 Rütbe: Artı 11ahmet6761 Rütbe: Artı 11ahmet6761 Rütbe: Artı 11ahmet6761 Rütbe: Artı 11ahmet6761 Rütbe: Artı 11ahmet6761 Rütbe: Artı 11
Rep Gücü: 0
Varsayılan c++ da sınıflar ve yapısı


2.2 Yorumlayıcılar (Interpreter)

Çoğu bilgisayarlar, derleyici yerine bir yorumlayıcıya (interpreter) sahip olmayı isterler. Daha önceleri bazı büyük bilgisayarlarda ve çok büyük bilgisayarlarda daha çok derleyiciler kullanılmaktaydı, diğer bilgisayarlarda daha çok yorumlayıcılar kullanılmaktaydı. Fakat günümüzde, PC tipi bilgisayarların hızının eski tip büyük bilgisayarların hızını geçmesi derleyicilerin bunlarda da kullanımını mümkün kılmaktadır.

Yorumlayıcı, bir programdaki satırı bir anda bir satır işlemiyle yorumlar. Yani satırlar tek tek yorumlanarak amaç programa erişilir. Bir satır başarılmadan sonraki satıra geçilmez. Yorumlayıcı, değişkenler kütüphanesini ve onların adreslerini derler ve çevrilmiş program satırının gerekli olduğu yerlere mutlak adresi sıkıştırır.

Yorumlayıcı tarafından ele alınmış bir program, derlenmiş bir programdan daha yavaş çalışır ve optimizasyon mümkün değildir. Bu özellik, hızlı etkileşimli uygulamalarda ve debug işlemlerinde faydalıdır. Bununla birlikte, yorumlanmış bir program, derlenmiş bir programdan daha kısa olmasına rağmen bellekte daha az yer kaplar. Bu faktör, sınırlı belleklerle çalışan ve genişletilmesi öngörülen bilgisayarların tasarımında önemli bir yer tutar. Benzer olarak hata ayıklamalarında yorumlayıcı, derleyiciden daha az başarılıdır.

Yorumlayıcı, her ifadeyi bellekte yerini alacak makine dili kodlarına çevirmez ve bundan dolayı da amaç program üretmez. Program satırlarının çevrilmesi sırasında üretilen makine kodu silinirken satır ifadeleri işletilir. Yorumlayıcıda, bir satırdaki hata düzeltilmeden diğer program satırına geçilmez. Bu durum aşağıdaki şekilde detaylı olarak gösterilmiştir.

Ayrıca yorumlayıcı, üst düzey komutları alarak her bir ifadeyi çalıştıracak ön tanımlamalı makine komutları dizisine referanslar. Bu dizi, sadece okunan veya gelişi güzel erişimli bellek tiplerinde depolanmalıdır. Bütün diziler ve bakış tabloları, RAM’deyken, yorumlama işi disk veya disketten RAM’de yazılım yüklemeli olarak yürütülür.



ROM






Çevirme



RAM RAM



Sonraki Satır



Şekil 2.3 Basit Bir Yorumlayıcının Yapısı

Yorumlayıcı, bir çok endüstriyel üretimde kullanıldığından, ROM’da monitör program (firmware) olarak tutulur. Üst düzey diller, genellikle derleyici kullanırken Basic gibi diller yorumlayıcı kullanırlar. Yorumlayıcının ifadeleri ve kaynak kodlarının makine diline tek tek çevrilmesi, etkileşimli kullanım için en uygun yoldur. Fakat benzer uygulamalarda, hata mesajlarını çözmek programcıya düşerken, ,iş de yavaşlar. Eğer hata mesajı kritik ise bu tip hatalar aşağıdaki örneğe yakın bir şekilde ortaya çıkar.
Syntax error 40, line 20 yani hatanın hangi satırda olduğunu belirtir ve kürsör gidip o satırın başında bekler. Yukarıdaki hataya bakılarak çevirme işi sırasında sonraki satırın yorumlanmasına geçmeden önce, satır numarası ve hata kodu verilen bu hata programcı tarafından giderilir. Hatanın olduğu kısma kadar çalıştığı kesindir.

Yorumlayıcı kullanıldığı zaman istenilen değişiklik program üzerinde yapılabilir ve program derlenmeden çalıştırılabiliyor. Bu yüzden program geliştirme esnasında çok kullanışlıdır. Turbo Pascal’da hem yorumlayıcı hem de derleyici mevcuttur.




2.3 Derleyici ile Yorumlayıcı Arasındaki Farklar

Yorumlayıcı da satırlar tek tek yorumlanarak amaç programa erişilir.
Mikroişlemci hızı düşük bilgisayarlarda, genelde yorumlayıcılar kullanılır.
Çalışma hızı yavaştır.
Bir satırdaki hata düzeltilmeden, diğer satırın yorumlanması işemi yapılmaz.
Yorumlanmış bir program, bellekte daha az yer işgal eder.
Satırlar tek tek yorumlanarak amaç programa erişilir.
Program geliştirmede çok kullanışlıdır.
Derleyici de satırlar bir anda yorumlanarak amaç programa erişim sağlanır. Tüm program bir anda derlenebilir.
Mikroişlemci hızı yüksek bilgisayarlarda daha çok derleyici kullanılır. (Günü-müz PC’lerinde işlemci hızı yüksek olduğundan, artık hem derleyici hem de yo-rumlayıcısı olan programlar kullanılmaktadır.)
Hata ayıklamalarında derleyici daha başarılıdır.
Derleme işi çok hızlı gerçekleşir.
Derlenmiş program, bellekte daha fazla yer kaplar.


Aşağıda, derlenmiş ve yorumlanmış program akışları arasındaki farkı anlatan algoritmalar verilmiştir.

Problem


Algoritma Geliştirme


Program
Bilgisayara Gir Düzeltme Yap

Evet
Hata Var Mı?
Hayır

Tamamla

Şekil 2.4 Yorumlanmış Program Akışı


Problem


Algoritma Geliştirme



Program Yaz



Bilgisayara Gir Düzeltme Yap


Derle


Evet
Hata Var Mı?
Hayır

Evet Hayır
Amaç Kodu Yükle Sentaks Hatası



Çalıştırmaya Başla


Evet
Hata Var Mı?
Hayır


Tamamla


Şekil 2.5 Derlenmiş Program Akışı

2.4 Derleyiciyi Oluşturan Unsurlar



SINIFLAR(classes)

Sınıflar nesne yönelimli programlama tekniğini uygulayabilmek için mutlaka gerekli olan C'deki yapılara benzeyen C++'a özgü veri yapılarıdır.
Tıpkı yapılarda olduğu gibi sınıflarla da çalışmadan önce bir sınıf bildirimi yapmak gerekir. Sınıf bildirimi bellekte yer kaplamaz(C++'ta nesne terimi daha çok bir sınıf türünden değişke ni anlatmakta kullanılır. Nesne yönelimli programlama tekniği sınıflar kullanılarak program yazma tekniğidir).
4.1 Sınıf Yapısı ve Nesneler

Sınıf, birbiriyle ilişkili verilerin ve bu verileri kullanmayı sağlayacak yordamların bir arada bulundurulmasını sağlayan bir yapıdır. Veri ve yordamların sistemin kalanından ayrılmasını ve gerekliyse gizlenmesini sağlar. Bir sınıf yaratmak yeni bir veri tipi yaratmaktır. Hazır bir veri tipi üzerinde hangi işlemlerin yapılabileceği derleyici tarfından bilinmektedir. Yaratılan yeni veri tipi (soyut veri tipi) üzerinde yapılabilecek işlemler de derleyiciye, sınıfa üye yordamlar (metodlar) tarafından öğretilir.

Gerçek Dünya:
Nesne = Nitelikler + Davranışlar

Yazılım Ortamı:
Nesne = Veriler + Yordamlar (Object = Data + Procedures)
Sınıf Bildiriminin Genel Biçimi:

class [sınıf_ismi] {
[private:]
...
...
[protected:]
...
...
[public:]
...
...};

Bir sınıf 3 bölümden oluşur:
1. Private
2. Protected
3. Public

Bir bölüm belirten anahtar sözcük ve iki nokta üst üste ile başlatılır, başka bir bölüm belirten sözcüğe kadar sürer. Birden fazla aynı bölüm belirten anahtar sözcük aynı sınıf bildirimi içerisinde kullanılabilir. Bölüm belirten anahtar sözcüklerin biri ya da hiçbirisi yazılmak zorunda değildir. Sınıf hiçbir bölüm belirten anahtar sözcükle başlatılmamışsa private bölüm anlaşılır. Okunabilirlik açısından sınıf isminin ilk harfi büyük geri kalan harfleri küçük yazılır. Bir yapı yalnızca veri elemanlarına sahiptir. Sınıflar hem veri hem fonksiyon içeren veri yapılarıdır. Yani normal yapılardan sınıfların fazlalıkları aynı zamanda fonksiyon da içermeleridir. Sınıf içerisinde bildirilen değişkenlere sınıfın veri elemanları(data member) sınıf içerisinde bildirilen fonksiyonlara ise sınıfın üye fonksiyonlar(member function) denir(daha yüksek seviyeli nesne yönelimli dilllerinde metod ismi de kullanılır). Veri elemanları ve üye fonksiyonları sınıfın herhangi bir yerinde yazılabilir.
Üye fonksiyonların sadece prototipleri sınıf içerisine konur. Tanımlamaları sınıf bildiriminden sonra yapılır. Ancak genellikle protected bölümü pek kullanılmaz, sınıfın veri elemanları private bölüme üye fonksiyonları public bölüme yazılır.

4.2 Bir Sınıf Türünden Nesnenin Tanımlanması

Genel biçimi:

[class] <sınıf_ismi> <nesne_ismi>;

class Sample x;
Sample y;

class anahtar sözcüğü yazılmayabilir. C++'ta yapı türünden nesne tanımlarken struct anahtar sözcüğü de kullanılmayabilir. Bir sınıf nesnesi için sınıfın toplam veri elemanları kadar yer ayrılır.

/*-----class1.cpp-----*/
#include <stdio.h>

class Sample {
private:
int a, b;
public:
void fonk(void);
};

void main(void)
{
Sample x;
printf("%d\n", sizeof(x));
}
/*-----------------------*/

4.3 Üye Fonksiyonları Tanımlanması

Üye fonksiyonları prototipleri sınıf bildirimi içerisine yerleştirilir, tanımlamaları dışarıda aşağıdaki gibi yapılır.

[geri dönüş değerinin türü] <sınıf isim> :: <fonksiyon ismi> ([parametreler])

void Sample::fonk(void)
{

}

İki tane iki nokta üstüste C++'a özgü bir operatördür. Üye fonksiyonlar amaç koda paramet re türleri ve sınıf isimleriyle kombine edilerek yazılırlar.Yani aynı isimli ve aynı parametre ya pısına sahip bir üye fonksiyonu ve global bir fonksiyon tanımlanabilir. Hiçbir sınıfa ait olma yan fonksiyonlara global fonksiyon denir.
4.4 Sınıfın Veri Elemanlarına ve Üye Fonksiyonlarına Erişim

Sınıfın veri elemanlarına ve üye fonksiyonlarına nokta operatörüyle erişilir. Bir üye fonk siyonu ancak aynı sınıf türünden bir nesneyle çağırılabilir. Eğer nesne olmadan çağırılırsa global bir fonksiyonun çağırıldığı anlaşılır.

X.fonk(); /*üye fonksiyonu çağırılmış*/
fonk(); /*global fonkiyon çağırılmış*/

/*-----class2.cpp-----*/
#include <stdio.h>

class Sample {
public:
int a, b;
public:
void fonk(void);
};

void Sample::fonk(void)
{
printf("I'm sample fonk..\n");
}

void fonk(void)
{
printf("I'm global fonk..\n");
}

void main(void)
{
class Sample X;

X.a = 10;
X.b = 20;
X.fonk();
fonk();
}
/*-----------------------*/

Bir üye fonksiyon içerisinde sınıfın hangi bölümünde tanımlanmış olursa olsun bütün veri elemanları ve üye fonksiyonlarına doğrudan erişilebilir. Yani sınıfın veri elemanları sınıfın üye fonksiyonları arasında ortak olarak kullanılmaktadır. Bir üye fonksiyon içerisinde kullanılan üye fonksiyonları o üye fonksiyon hangi sınıf nesnesiyle çağırılmışsa o sınıf nesnesinin elemanları olur.

/*-----class3.cpp-----*/
#include <stdio.h>

class Sample {
public:
int a;
public:
void fonk1(int x);
void fonk2(void);
};

void Sample::fonk1(int x)
{
printf("I'm sample fonk1..\n");
a = x;
}

void Sample::fonk2(void)
{
printf("%d\n", a);
}
void main(void)
{
class Sample X;

X.fonk1(50);
Sample Y;

Y.fonk1(100);
X.fonk2();
Y.fonk2();
}
/*-----------------------*/

Bir üye fonksiyonu içerisinde sınıfın bir diğer üye fonksiyonu da doğrudan çağırılabilir. Sınıfın a üye fonksiyonu X nesnesiyle çağırılmış olsun, a üye fonksiyonu içerisinde b üye fonksiyonu doğrudan çağırılabilir. Bu durumda b üye fonksiyonu içerisinde kullanılan veri elemanları X sınıf nesnesine ilişkindir.

/*-----class4.cpp-----*/

#include <stdio.h>
class Sample {
public:
int a;
public:
void fonk1(int x);
void fonk2(void);
};
void Sample::fonk1(int x)
{
printf("I'm sample fonk1..\n");
a = x;
fonk2();
}
void Sample::fonk2(void)
{
printf("%d\n", a);
}
void main(void)
{
class Sample X;

X.fonk1(50);
}
/*-----------------------*/


4.5 Bir Sınıfın Başka Bir Sınıfa Üye Olması

Nesneye dayalı programlamanın amaçlarından biri, daha önce yazılmış bir program kodunun yeniden kullanılmasını kolaylaştırmaktır. Önceden yazılmış bir program kodunu yeni yazılan programa adepte etmenin çeşitli zorlukları (kodun anlaşılır olmayışı, program düzeninin farklılığı, modüller arası bağımlılık, vs.) vardır. Nesneye dayalı programlamanın doğal yapısı bu mantıkla yazılmış olan eski kodun yeni programa uyarlanmasını kolaylaştırmaktadır. Bunun için iki yöntem kullanılmaktadır. Bunların ilki bir sınıfın başka bir sınıfa üye yapılmasıdır. İkinci olanak ise ileride ayrıntılı olarak incelenecek olan, daha esnek bir programlama olanağı sağlayan kalıtım özelliğidir.
C++’ta, daha önce tanımlanmış olan bir sınıf, başka bir sınıfın içinde üye eleman olarak yer alabilir.

class kesir{ // Kesir yapısı tanımlayan sınıf
int pay, payda;
public:
Kesir(int py=0, int pyd=1){
pay=py;
payda=pyd;
}
:
};
class ComplexKes{ // Karmaşık sayıları tanımlayan sınıf
kesir re, im; // kesir sınıfı tipinden iki veri
public:
ComplexKes(int re_in=0,int im_in=0):re(re_in),im(im_in)
{
: // Gerekl islemler
}
}
Ana programda aşağıdaki tanımlama yapıldığında önce ComplexKes kurucu fonksiyonu canlanacaktır. Ancak bu fonksiyona ait işlemler gerçekleştirilmeden önce üye sınıflara (kesir sınıfı) ait kurucu fonksiyonlar yürütülecektir. Ardından asıl kurucu fonksiyona ait işlemler gerçekleştirilecektir.
ComplexKes c(8,3);

Örnekte görüldüğü gibi, bir sınıfa üye nesne yaratırken kullanılan yazılım, normalde bir sınıftan bir nesne yaratırken kullanılandan biraz farklıdır. Normalde yaratılan nesneye başlangıç değeri atanacaksa, bu değer nesnenin adının yanına yazılarak kurucu fonksiyona aktarılır. Ancak üye nesneler için bu yöntem kullanılamaz. Üye nesnelerin sadece bildirimi yapılır. Başlangıç değerleri ancak, üyeyi kapsayan sınıfın kurucu fonksiyonu çağrıldıktan sonra verilebilir.
ComplexKes(int re_in=0,int im_in=0)
{ // Deişkenler 'private' olduğundan aşağıdaki erişimler yasaktır.
re.pay=re_in;
re.payda=1;
im.pay=im_in;
im.payda=1;
}
ahmet6761 Çevrimdışı   Alıntı Yaparak Cevapla
Eski 11-04-08, 11:26   #2 (permalink)
Geçerken Uğradım
 
Giriş Tarihi: 23-03-2008
Mesajlar: 51
Rep Puanı: 2375
ERKANSAN1 Rütbe: Artı 11ERKANSAN1 Rütbe: Artı 11ERKANSAN1 Rütbe: Artı 11ERKANSAN1 Rütbe: Artı 11ERKANSAN1 Rütbe: Artı 11ERKANSAN1 Rütbe: Artı 11ERKANSAN1 Rütbe: Artı 11ERKANSAN1 Rütbe: Artı 11ERKANSAN1 Rütbe: Artı 11ERKANSAN1 Rütbe: Artı 11ERKANSAN1 Rütbe: Artı 11
Rep Gücü: 25
Varsayılan C: c++ da sınıflar ve yapısı


paylaşım için teşekkürler
ERKANSAN1 Çevrimdışı   Alıntı Yaparak Cevapla
Cevapla

Bu konunun kısa yolunu aşağıdaki sitelere ekleyebilirsiniz

Konu Araçları

Gönderme Kuralları
Yeni konu açamazsınız
Cevap yazamazsınız
Dosya gönderemezsiniz
Mesajlarınızı düzenleyemezsiniz

BB code is Açık
Smiley Açık
[IMG] kodu Açık
HTML kodu Kapalı
Trackbacks Kapalı
Pingbacks Kapalı
Refbacks Kapalı


Tüm saatler GMT +3. Şuan saat: 20:20
(Türkiye için GMT +2 seçilmelidir.)


ForumTR Mail'den Ücretsiz Bir Mail Almak veya Mail'inizi Okumak İçin Tıklayınız.

Forums Directory eXTReMe Tracker Almanya Vizesi | Rusya Vizesi | Ukrayna Vizesi | Fransa Vizesi | Vize İşlemleri | Almanya Otelleri | Tatil | Haberler | Telefon Santrali | Daily News

Sitemiz bir forum sitesi olduğu için kullanıcılar her türlü görüşlerini önceden onay olmadan anında siteye yazabilmektedir,
bu yazılardan dolayı doğabilecek her türlü sorumluluk yazan kullanıcılara aittir,
yine de sitemizde yasalara aykırı unsurlar bulursanız sikayet@frmtr.com email adresine bildirebilirsiniz, şikayetiniz incelendikten sonra en kısa sürede gereken yapılacaktır.
Report Abuse, Harassment, Scamming, Hacking, Warez, Crack, Divx, Mp3 or any Illegal Activity to abuse@frmtr.com


Search Engine Optimization by vBSEO

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465