İÇİNDEKİLER. İşletim Sistemleri

Ebat: px
Şu sayfadan göstermeyi başlat:

Download "İÇİNDEKİLER. İşletim Sistemleri"

Transkript

1 İşletim Sistemleri Dr. Binnur Kurt Omega Eğitim ve Danışmanlık 1 S a y f a

2 İÇİNDEKİLER 1. İşletim Sistemi 2. Kabuk 3. Prosesler Prosesler Arası İletişim 6. İş Sıralama 7. Ölümcül Kilitlenme 8. Çok İplikli Programlama 9. Bellek Yönetimi 10. Dosya Sistemi 11. Soket Haberleşme 2 S a y f a

3 BÖLÜM 4 Bölümün Amacı Bölüm sonunda aşağıdaki konular öğrenilmiş olacaktır: İplik Modeli Linux da PTHREAD Kütüphanesi kullanarak çok iplikli uygulama geliştirmek C++11 de çok iplikli uygulama geliştirmek Java da çok iplikli uygulama geliştirmek 3 S a y f a

4 4.1 Giriş de prosesler gibi birden fazla görevi yerine getirmek için kullanılır. de prosesler gibi işlemciyi zamanda paylaşarak kullanılırlar. Eğer birden fazla işlemci ya da çekirdek varsa çekirdek sayısı kadar iplik ya da proses gerçekten paralel olarak çalışabilir. proseslere göre daha hafif sıklet bir çözüm sunar. Yeni bir iplik yaratıldığında sadece yığın için yer ayrılır. Ait olduğu prosesin heap ve text alanlarını diğer ipliklerle beraber paylaşır. ile veri ve görev paralelliği daha ince ölçekte gerçeklenebilir. Proses fork sistem çağrısı kullanılarak yaratılır: #include <unistd.h> pid_t fork(void); Çağrıyı yapan prosesin bellek görüntüsü birebir kopyalanarak çocuk proses yaratılır. Bu yüzden fork ile proses yaratmak maliyetlidir. Eğer çocuk proses ebeveyn prosesin bellek alanında bir değişiklik yapmayacaksa, Linux işletim sisteminde, fork sistem çağrısına göre daha hızlı çalışan vfork sistem çağrısını kullanmak gerekir: #include <unistd.h> pid_t vfork(void); vfork paylaşılan bellek alanına yazma yapıldığında kopyalama yapar. Bu en iyileme literatürde copy-on-write olarak adlandırılmaktadır. Özellikle çocuk proses exec sistem çağrılarından birini kullanacaksa, fork yerine vfork kullanılmalıdır. İplik yaratmak için ise clone sistem çağrısı kullanılır: #include <sched.h> int clone(int (*fn)(void *), void *child_stack,int flags, void *arg,...); Aşağıda clone sistem çağrısı kullanılarak yaratılmış bir ipliğin yer aldığı örnek bir uygulama bulunmaktadır: Kod 4.1: #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <sched.h> #define CHILD_STACK_SIZE int var; int do_something(void *) { printf("i am in thread. Assigning 42 to the variable.\n"); var = 42; int main(int argc, char *argv[]) { void **child_stack; var = 9; child_stack = (void **) malloc(child_stack_size); printf("i am in the process! The variable was %d\n", var); clone(do_something, child_stack+child_stack_size/sizeof(void**), 4 S a y f a

5 CLONE_SIGHAND CLONE_FS CLONE_VM CLONE_FILES, NULL); sleep(1); printf("i am in the process. The variable is %d\n", var); return 0; CLONE_VM sabiti ipliğin prosesin bellek uzayını paylaşmasına neden olur. var değişkenine P prosesi tarafından CLONE_VM seçeneği ile yaratılan tüm iplikler erişebilir (Şekil-4.1). P var t 1 t 2 t 3 Şekil-4.1 Proses ve ipliklerin bellek erişimleri 3.2 PTHREAD Kütüphanesini Kullanarak İplik Yaratmak clone gibi sistem çağrılarını kullanarak iplik programlamak güçtür. İplik programlamayı bu nedenle POSIX Thread Kütüphanesi gibi bir üst düzey API kullanarak gerçekleştiriyoruz. Yaratılan her ipliğe o ipliğin çalıştırmasını istediğimiz fonksiyonun adresini ve parametresini veriyoruz. PThread Kütüphanesi kullanarak iplik yaratmak için pthread_create fonksiyonunu kullanıyoruz: #include <pthread.h> int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void*(*start_routine)(void*), void *arg) Burada birinci parametre ipliğin kimliğini saklamak istediğimiz bellek gözünün adresini ve ikinci parametre ise yaratmak istediğimiz ipliğin özelliklerini almaktadır. Üçüncü parametre ile ipliğin çalıştırmasını istediğimiz fonksiyonun adresini ve dördüncü parametre ile bu fonksiyona geçirmek istediğimiz parametrenin değerini veriyoruz. PTHREAD kütüphanesindeki tüm fonksiyonlar ve veri yapıları pthread_ ön eki ile başlar. Aşağıdaki uygulamada (Kod-4.2) 5 adet iplik yaratılmaktadır. çalışmaya başladıktan sonra ekrana bir ileti gönderip uyutulmaktadır. Ebeveyn proses ise bu beş ipliğin işini bitirmesini beklemek üzere pthread_join çağrısı yapmaktadır. Yaratılan her ipliğe ulaşmak üzere pthread_t tipinde bir veri yapısı iliştirilir. Tüm PTHREAD kütüphane fonksiyonlarda iplik üzerinde işlem yapmak amacı ile referans olarak bu değer kullanılır. 5 S a y f a

6 Yaratılan ipliğin yürüteceği fonksiyon herhangi bir tipten değer alabilir ve benzer şekilde herhangi bir tipten değer döndürebilir. Parametre aktarımı pthread_create çağrısı ile iplik yaratılırken gerçekleşir: pthread_create( &tid[i], NULL, sleeping, (void *)(SLEEP_TIME+2*i) ); İpliğin döndürdüğü değere ise pthread_join çağrısı üzerinden erişilir: pthread_join( tid[i], (void **)&return_value); Kod 4.2: #include <pthread.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <iostream> using namespace std; #define NUM_THREADS 5 #define SLEEP_TIME 10 pthread_t tid[num_threads]; void* sleeping(void *); void thread_start() { for (int i = 0; i < NUM_THREADS; i++) { pthread_create( &tid[i], NULL, sleeping, (void *)(SLEEP_TIME+2*i)); void thread_wait() { int return_value; for (int i = 0; i < NUM_THREADS; i++) { pthread_join( tid[i], (void **)&return_value); cout << "Thread " << i << " joins...!" << endl ; void* sleeping(void * arg) { int sleep_time= *((int*)(&arg)); cout << endl << "Sleeping for " << sleep_time << " seconds" << endl ; sleep(sleep_time); 6 S a y f a

7 return ((void *)sleep_time); int main() { thread_start(); thread_wait(); return 0; Bazen iplik fonksiyonu birden fazla parametre alması ya da birden fazla değer döndürmesi gerekebilir. Bu durumda parametre ya da dönüş değeri için struct ile bir tip tanımlanır. Birden fazla değer struct alanları olarak tanımlanır: struct problem { long *begin; long *end; problem(long *_begin,long *_end): begin(_begin), end(_end){ ; Aşağıdaki örnekte yüz milyon elemanlı bir dizinin elemanları toplamı, çekirdek sayısı kadar iplik yaratılarak, paralel olarak çözülmeye çalışılmaktadır: Kod 4.3: #include <iostream> #include <pthread.h> #include <time.h> using namespace std; const long PROBLEM_SIZE= ; const int NUMBER_OF_CORE= pthread_num_processors_np(); struct problem { long *begin; long *end; problem(long *_begin,long *_end): begin(_begin), end(_end){ ; long numbers[problem_size]; void init_array(long *array,long size){ for (long i=0,*p=array;i<size;++i,++p) *p=i; void * parallel_sum(void* _problem){ problem* prob= (problem*) _problem; long sum=0; for (long *q=prob->begin;q!=prob->end;++q) { 7 S a y f a

8 sum += *q; return new long(sum); void serial_sum(long *array,int size){ long sum=0l; long* end=array+size; for (long *p=array;p!=end;++p) sum += *p; cout << "Sum (serial): " << sum << endl; int main(){ init_array(numbers,problem_size); pthread_t threads[number_of_core]; problem **probs= new problem*[number_of_core]; long per_thread= PROBLEM_SIZE / NUMBER_OF_CORE; long* beg= numbers; long* end= beg + per_thread; for (int i=0;i<number_of_core;++i){ probs[i]= new problem(beg,end); beg = beg + per_thread; end= end + per_thread; for (int i=0;i<number_of_core;++i){ pthread_create( threads+i, 0L, parallel_sum, (void*)probs[i] ); long sum=0l; for (int i=0;i<number_of_core;++i){ int *result; pthread_join(threads[i], (void**)&result); sum += *result; delete result; cout << "Sum (parallel): " << sum << endl; for (int i=0;i<number_of_core;++i){ delete probs[i]; delete[] probs; serial_sum(numbers,problem_size); 8 S a y f a

9 3.3 C++11 de İplik Yaratmak C++, 2011 yılında çıkan yeni sürümü ile günümüz modern programlama dillerinde bulunan birçok ileri düzey özelliğe kavuşmuştur. Nihayet paralel programlama için kullandığımız iplikler işletim sistemine bağımlı olmaktan kurtuldu ve dilin bir parçası haline geldi. C++11 de thread kütüphanesi ile gelen thread adında yeni bir sınıf yer alır. C++11 de iplik yaratmanın 3 farklı yolu vardır. 1. Fonksiyon kullanımı thread sınıfının kurucu fonksiyonu ilk parametre olarak çalıştırılacak fonksiyonu alır (Kod 4.4). Aşağıdaki örnekte t1 ve t2 adında iki iplik yaratılır. Bu iplikler hello fonksiyonunu çalıştırırlar. Kod 4.4: #include <iostream> #include <thread> using namespace std; void hello(){ cout << "Hello Mars!" << endl ; int main(){ thread t1(hello); thread t2(hello); t1.join(); t2.join(); cout << "Done." << endl; 2. struct Kullanımı Burada ilk önce, () operatörüne işlev yüklenen bir struct tasarlanır. thread sınıfının kurucu fonksiyonu ilk parametre olarak tasarlanan bu struct bir nesne alır (Kod 4.5). Aşağıdaki örnekte t1 ve t2 adında iki iplik yaratılır. Bu iplikler struct içinde tanımlı void operator()() fonksiyonunu çalıştırırlar. Kod 4.5: #include <iostream> #include <thread> using namespace std; struct fun { void operator()(){ cout << "Hello Mars!" << endl ; ; 9 S a y f a

10 int main(){ thread t1((fun())); thread t2((fun())); t1.join(); t2.join(); cout << "Done." << endl; 3. İfadesi Kullanımı C++11 ile birçok yenilik geldi. Bu yeniliklerden bir diğeri, C++11 de artık fonksiyonel programlama yapılabiliyor olmamızdır. thread sınıfının kurucu fonksiyonu ilk parametre olarak artık ifadesi alabiliyor (Kod 4.6). Aşağıdaki örnekte t1 ve t2 adında iki iplik yaratılır. Bu iplikler run ve gun isimli ifadelerini çalıştırırlar. Kod 4.6: #include <iostream> #include <thread> using namespace std; int main(){ function<void()> run =[](){ cout << "Run forrest run!" << endl; ; auto gun = [](){ cout << "Hello Mars!" << endl; ; thread t1(gun); thread t2(run); t1.join(); t2.join(); cout << "Done." << endl; İplik fonksiyonuna parametre aktarmak mümkündür. Bunun için basitçe thread sınıfının yapıcısına çalıştırılacak fonksiyondan sonra sırayla parametre değerleri geçilir (Kod 4.7): thread t1(f,4) ve thread t2(f,8). Kod 4.7: #include <thread> #include <iostream> using namespace std; struct fun { void operator()(int value){ cout << "value= " << value << endl; 10 S a y f a

11 ; int main(){ fun f; thread t1(f,4); thread t2(f,8); t1.join(); t2.join(); Aşağıdaki örnekte yüz milyon elemanlı bir dizinin elemanları toplamı, çekirdek sayısı kadar iplik yaratılarak, paralel olarak çözülmeye çalışılmaktadır (Kod 4.8). PTHREAD kullanılarak verilen çözüm ile karşılaştırıldığında C++11 de daha az kod yazılarak çözüme ulaşıldığı görülebilir. Kodda karşılaştığınız auto, async ve future C++11 ile gelen yenilikler. async ile yarattığımız ipliğin ürettiği sonuca future üzerinden asenkron bir şekilde erişilebilir. future sınıfının get çağrısını yapan proses, eğer iplik sonlanmamış ise bloke olmasına neden olur. Bloke olan proses iplik tamamlandığında kaldığı yerden devam eder. Eğer get çağrısı yapıldığında iplik sonlanmış ise çağrıyı yapan proses bloke olmadan sonucu ulaşır. Kodda üretken programlamanın (=Generic Programming) gücü hissediliyor. Aynı testi std::vector ile kodda neredeyse hiçbir değişiklik yapmadan gerçekleştirebiliriz. Kod 4.8: #include <iostream> #include <thread> #include <future> #include <algorithm> using namespace std; const int SIZE= ; int numbers[size]; template <typename iter> void init_problem(iter beg,iter end){ int i=1; for (iter p=beg;p!=end;p++,++i) *p= i; template <typename iter> int parallel_sum(iter begin, iter end){ long len= distance(begin,end); if (len <= ){ return accumulate(begin,end,int()); iter mid= begin + len /2; auto handle_left= async(launch::async,parallel_sum<iter>,begin,mid); auto handle_right= async(launch::async,parallel_sum<iter>,mid,end); 11 S a y f a

12 return handle_left.get()+ handle_right.get(); int main(){ init_problem(numbers,numbers+size); int sum= parallel_sum(numbers,numbers+size); cout << "Sum (parallel): " << sum << endl ; 3.4 Java 8 de İplik Yaratmak Java 8 platformu üzerinde veri paralelliğini üç yöntemle gerçeklemek mümkündür. 1. Callable, Future ve Executor Kullanımı Java programlama dili ilk çıktığından itibaren ipliklerle programlama için bir çözüm sunuyor. Runnable arayüzünü gerçekleyen bir sınıf tasarlamakla işe başlıyoruz: public class HelloRunner implements Runnable public void run(){ System.out.println("Hello Mars!"); Ardından HelloRunner sınıfından bir nesne yaratıyoruz: HelloRunner runner= new HelloRunner(); Son olarak Thread sınıfından bir nesne yaratıyoruz ve Thread kurucusuna runner nesnesini parametre olarak veriyoruz: Thread t= new Thread(runner); C++11 deki thread sınıfından farklı olarak, Java da Thread sınıfından nesne yaratmak, ipliğin çalışması için yeterli değildir. Son olarak start metodunun çalıştırılması gerekir: t.start(); Runnable ipliklerin en kötü yönü run() metodunun herhangi bir parametre alamaması ve ipliğin bir değer döndürememesidir. Bu yüzden görevi yaratan iplik ile sonucu üretecek iplik arasında mutlaka bir eş güdüm oluşturmak gerekir. Java SE 5 ile gelen Callable arayüzü ile artık sonucu call() metodundan dönmek ve Future arayüzünün get() çağrısı ile bu sonuca asenkron bir şekilde ulaşmak mümkündür. C++11 in future sınıfı ile Java nın Future sınıfı aynı işlevi sunmaktadır. Java SE 5 ile gelen yeniliklerden biri de İplik havuzudur (=Thread Pool). Farklı havuz türleri ihtiyaca göre seçilebilir: Her zaman sabit sayıda ipliğin yer aldığı Fixed Thread Pool, Parlamalı çalışma modu için Cached Thread Pool, Yığın işler için Single Thread Pool, Periyodik işler için Scheduled Thread Pool. Ancak buradaki tüm yapılar alt düzeydedir. Bu yüzden bu yapı üzerinde uygulama geliştirmek vakit alır, test etmesi zordur, yarış durumları (=race conditions) ve ölümcül kilitlenme (=deadlock) gibi durumların iyi düşünülmüş olması gerekir. Örnek uygulama için kullanılan alan sınıfı Kod 4.9 da verilmiştir. Burada amacımız 60 milyon Programmer nesnesi arasından, 40 yaşın üstünde "en bilgili" Java programcısını bulmaktır. 12 S a y f a

13 Kod 4.9: public class Programmer implements Serializable { private int id; private String name; private String surname; private int age; private ProgrammingLanguage programminglanguage;... public class ProgrammingLanguage implements Serializable { private String name; private int level;... Önce seri çözüme bir bakalım. Seri çözümde liste içindeki Programmer sınıfı nesnelerini teker teker ziyaret edip en deneyimli Java programcısını tek bir iplik kullanarak bulmaya çalışıyoruz (Kod 4.10). Kod 4.10: private static Programmer serialsolve(list<programmer> list) { Programmer oldest = null; for (Programmer programmer : list) { if (programmer.getage() > 40 && programmer.getprogramminglanguage().getname().equalsignorecase("java")) { if (oldest == null) { oldest = programmer; else if (programmer.getprogramminglanguage().getlevel() > oldest.getprogramminglanguage().getlevel()) { oldest = programmer; return oldest; Callable iplik kullanılan çözüm ise Kod 4.11 de verilmiştir. Kod 4.11: private static long callablethread(list<programmer> list) throws InterruptedException { Programmer oldest = null; int numberofsegments = DATA_SIZE / SERIAL_THRESHOLD; ExecutorService es = Executors.newFixedThreadPool( Runtime.getRuntime().availableProcessors()); List<Callable<Programmer>> callables = new ArrayList<>(numberOfSegments); for (int i = 0, j = 0; 13 S a y f a

14 i < numberofsegments; ++i, j += SERIAL_THRESHOLD) { callables.add( new ProcessingThread(j, SERIAL_THRESHOLD, list) ); List<Future<Programmer>> partialsolutions = es.invokeall(callables); try { oldest = partialsolutions.get(0).get(); for (int i = 1; i < partialsolutions.size(); ++i) { Programmer programmer = partialsolutions.get(i).get(); if (programmer.getprogramminglanguage().getlevel() > oldest.getprogramminglanguage().getlevel()) { oldest = programmer; catch (InterruptedException ExecutionException ex) { System.err.println(ex.getMessage()); es.shutdown(); return oldest; public class ProcessingThread implements Callable<Programmer> { private final int start; private final int length; private final List<Programmer> list; public ProcessingThread(int start, int length, List<Programmer> list) { this.start = start; this.length = length; this.list = public Programmer call() throws Exception { Programmer oldest = list.get(start); Programmer programmer; for (int i = start + 1, j = 1; j < length; ++j, ++i) { programmer = list.get(i); if (programmer.getage() > 40 && programmer.getprogramminglanguage().getname().equalsignorecase("java")) { if (programmer.getprogramminglanguage().getlevel() > oldest.getprogramminglanguage().getlevel()) { oldest = programmer; return oldest; 14 S a y f a

15 2. Fork/Join Çatısının (=Framework) Kullanımı Geliştirdiğimiz uygulamaların yüksek başarımla çalışması hepimizin arzu ettiği bir durum. Ancak bu her zaman ulaşılması kolay bir hedef olmayabilir. Özellikle günümüzde yazılımdan beklentilerin sürekli arttığı göz önüne alındığında, bu hedefe ulaşmak daha da zorlaşmaktadır. Başarımı iyileştirmeyi mutlaka yazılım geliştirme sürecinin (müşteriden isteklerin alınması, sistem çözümleme, detaylı tasarım, mimari tasarım, gerçekleme, sınama, bakım) bir parçası haline getirmeliyiz. Başarımı en iyilemek yazılım ortaya çıktıktan sonra yapılan bir etkinlik olmamalı. Java uygulamalarının başarımının en iyilenmesi ise farklı katmanlarda çalışmayı gerektirir. Donanım katmanı, İşletim sistemi katmanı, Java Sanal Makinası (JSM) katmanı ve elbette uygulama katmanı. Burada yer alan her bir katmandaki başarımı artırmak için ne yazık ki elimizde sihirli bir değnek bulunmuyor. Donanım katmanındaki gelişmeler elimizi güçlendiriyor: Çok çekirdekli mimariler, büyük bellekli bilgisayar sistemleri, daha yüksek kapasiteli cep bellekler (L0, L1, L2, L3), katı hal diskler, daha hızlı ara bağlaşım birimleri, çok çekirdekli yüksek başarımlı ekran kartı işlemcileri. İşletim sistemleri bu donanım kaynaklarını uygulamalar ve kullanıcılar arasında verimli bir şekilde dağıtmaktan ve yönetmekten sorumlu çok sayıda servisten oluşuyor: proses sıralayıcı, sanal bellek yönetimi, giriş/çıkış yönetimi, kullanıcı yönetimi, dosya sistemi, pencereleme sistemi. Linux (Red Hat, Suse), Unix (Oracle Solaris, IBM AIX, HP-UX), Microsoft Windows gibi işletim sistemleri bu güncel sistem kaynaklarını iyi yönettikleri söylenebilir. Yine de genel amaçlı işletim sistemi olmalarından kaynaklanan bazı darboğazlar yaşıyorlar. Java uygulamaları doğrudan işletim sistemi üzerinde çalışmazlar. Bir sanal makinaya ihtiyaç duyarlar: Java Sanal Makinası (JSM). JSM'nin görevi, kabaca, Java uygulamalarını oluşturan bytecode olarak isimlendirilen makina komutlarını, üzerinde çalıştığı işletim sisteminin ve işlemcinin anlayacağı ve çalıştırabileceği forma çevirmektir. Java platformunun en güçlü tarafının JSM olduğu söylenebilir. JSM bu dönüşümü yaparken devingen en iyileme yapabilmektedir. C/C++'da kod yazdığınızda ise derleyici ancak durağan en iyileme yapabilir. Durağan en iyileme ise başarımda kısıtlı bir iyileşme sağlayabilir. JSM içinde başarımı belirlemede önemli işlevi olan iki bileşen yer alır: Tam Anında Derleme ve Çöp Toplayıcı. Java uygulamaları çalışmaya başladıklarında yorumlamalı olarak çalışırlar. JSM uygulamayı çalıştırırken kesitini de alır. Eğer bir iyileştirme görüyorsa sınıf metotlarını bytecode'dan işlemcinin doğrudan çalıştırabileceği doğal komutlara dönüştürür. JSM satın alabileceğiniz, üretebileceğiniz bir işlemci tanımlar. Bu işlemcinin bir komut kümesi, yığın temelli adresleme kipleri, saklayıcı kümesi, yığın göstergesi, program sayacı, bellek modeli vardır. Çoğu zaman JSM'yi yazılımsal olarak ediniriz. Oracle, hemen hemen tüm işletim sistemleri için bir JSM yayınlıyor. Bu adresten elinizdeki işletim sistemi için bir JRE ya da JDK indirebilirsiniz. Eğer amacınız sadece Java uygulamalarını çalıştırmak ise Java Runtime Environment (JRE) yeterli olacaktır. Eğer uygulama geliştirmek isterseniz Java Geliştirme Çantasını (Java Development Kit, JDK) indirmeniz gerekir. Bu yazının yazıldığı tarihte, Java nın 8 sürümü vardı. Her yeni sürümde dilde bazı eklentiler, mevcut API'lerde değişiklikler ve yeni API'ler ile tanışıyoruz. Bu arada yeni sürümlerde bazen JSM'de de değişiklikler olabiliyor. Şu ana kadar ki yeni sürümlerde Java 1.2 ve Java SE 5'de dilde ciddi sayılabilecek yenilik geldi. Java 7 ile dilde gelen yenilikler daha çok geliştiricinin kodlama başarımını iyileştiren 15 S a y f a

16 türden. Java 7 de, Böl/Katıl çatısı olarak adlandırılan çok çekirdekli sistemlerde uygulama geliştirmek için yeni bir çözüm bulunuyor. Bu çözüm, Concurrency API ile gelen yeni bir iş parçası havuzu olan ForkJoinPool ve bu havuza atayacağımız iş parçacıklarını tanımladığımız RecursiveAction ve RecursiveTask sınıflarını kullanmaktadır. Fork/Join çatısı 1'e göre kodlaması daha kolay olsa da hala alt düzey bir API sunmaktadır. Üstelik problemi iki alt parçaya ayırmak ile seri olarak çözümü arasında genellikle veri boyutu üzerinden verilmesi gereken bir karar vardır. Fork/Join çatısı kullanılarak elde edilen çözüm ise Kod 4.12 de verilmiştir. Kod 4.12: private static long forkjoin(list<programmer> list) { long start = System.nanoTime(); ForkJoinPool pool = new ForkJoinPool(); ForkListProcessing flp = new ForkListProcessing(0, list.size(), list); Programmer oldest = pool.invoke(flp); System.err.println("Oldest [FJ]: " + oldest); long stop = System.nanoTime(); return (stop - start); public class ForkListProcessing extends RecursiveTask<Programmer> { private final int start; private final int length; private final List<Programmer> list; private static final int SERIAL_THRESHOLD = 5_000_000; public ForkListProcessing(int start, int length, List<Programmer> list) { this.start = start; this.length = length; this.list = public Programmer compute() { if (length <= SERIAL_THRESHOLD) { return serialsolver(); else { int startleft = start; int lengthleft = length / 2; int startright = start + lengthleft; int lengthright = length - lengthleft; RecursiveTask<Programmer> left = new ForkListProcessing(startLeft, lengthleft, list); RecursiveTask<Programmer> right = new ForkListProcessing(startRight, lengthright, list); left.fork(); right.fork(); Programmer leftsolution = left.join(); Programmer rightsolution = right.join(); if (leftsolution.getprogramminglanguage().getlevel() >= 16 S a y f a

17 rightsolution.getprogramminglanguage().getlevel()) { return leftsolution; else { return rightsolution; private Programmer serialsolver() { Programmer oldest = list.get(start); Programmer programmer; for (int i = start + 1, j = 1; j < length; ++j, ++i) { programmer = list.get(i); if (programmer.getage() > 40 && programmer.getprogramminglanguage().getname().equalsignorecase("java")) { if (programmer.getprogramminglanguage().getlevel() > oldest.getprogramminglanguage().getlevel()) { oldest = programmer; return oldest; 3. Dönüştür-İndirge (=Map-Reduce) Çatısının Kullanımı Dönüştür-İndirge çatısı Java SE 8 ile gelmiştir ve alt tarafta Fork/Join çatısını kullanır. Collection API ile hazır olarak gelen paralel kaplar ve Dönüştür-İndirge çerçevesi kullanılarak, çekirdek sayısına göre ölçeklenebilir çözümlere hızlıca ulaşabilir. Dönüştür-İndirge çerçevesi kullanılarak elde edilen çözüm ise Kod 4.13 de verilmiştir. Koddan görüldüğü gibi Java 8 soyutlama düzeyini en üst düzeye çıkarıyor. Hiç iplik kullanmadan aynı problemi paralel olarak çözmeyi başardık. Bunu sağlayan Java 8 ile birlikte gelen Stream API sidir. Stream bir iş hattı gibi düşünülebilir. İş hattından sadece Programmer sınıfından nesneler akıyor. Bu nesneler akarken yapılacak işleri bir metot zinciri olarak verebiliyoruz: filter() ve reduce(). filter() ile akan nesneler arasından seçim yapabiliyoruz. İş hattından, sadece verdiğimiz koşula uyan programcıların akmasını sağlıyoruz. 17 S a y f a

18 Kod 4.13: private static Programmer mapreduce(list<programmer> list) { long start = System.nanoTime(); Programmer oldest = list.parallelstream().filter( (Programmer prg) -> prg.getage() > 40 && prg.getprogramminglanguage().getname().equalsignorecase("java") ).reduce( (left, right) -> left.getprogramminglanguage().getlevel() >= right.getprogramminglanguage().getlevel()? left : right ).get(); return oldest; 18 S a y f a

İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri

İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık  İşletim Sistemleri İşletim Sistemleri Dr. Binnur Kurt binnur.kurt@gmail.com Omega Eğitim ve Danışmanlık http://www.omegaegitim.com 1 S a y f a İÇİNDEKİLER 1. İşletim Sistemi 2. Kabuk 3. Prosesler 4. İplikler 5. İplikler

Detaylı

Multicore/Multithread Programlama

Multicore/Multithread Programlama Multicore/Multithread Programlama Onur Tolga Şehitoğlu Bilgisayar Mühendisliği 7 Şubat 2008 Başlıklar 1 Gereksinimi Dal ile Süreç Çok İşlemci ve Dal Modelleri Neden Çoklu Dal Programlama? 2 Çok İşlemci/Çok

Detaylı

Bilgisayar İşletim Sistemleri BLG 312

Bilgisayar İşletim Sistemleri BLG 312 Giriş Bilgisayar İşletim Sistemleri BLG 312 İplikler geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü vardır bazı durumlarda, aynı adres uzayında birden fazla akış kontrolü

Detaylı

Proses. Prosesler 2. İşletim Sistemleri

Proses. Prosesler 2. İşletim Sistemleri 2 PROSESLER Proses Bir işlevi gerçeklemek üzere ardışıl bir program parçasının yürütülmesiyle ortaya çıkan işlemler dizisi Programın koşmakta olan hali Aynı programa ilişkinbirdenfazlaprosesolabilir. Görev

Detaylı

PROSESLER. Proses. Proses

PROSESLER. Proses. Proses Proses 2 PROSESLER Bir işlevi gerçeklemek üzere ardışıl bir program parçasının yürütülmesiyle ortaya çıkan işlemler dizisi Programın koşmakta olan hali Aynı programa ilişkin birden fazla proses olabilir.

Detaylı

Giriş. geleneksel işletim sistemlerinde her prosesin. aynı adres uzayında birden fazla akış kontrolü gerekebilir

Giriş. geleneksel işletim sistemlerinde her prosesin. aynı adres uzayında birden fazla akış kontrolü gerekebilir 3 İPLİKLER Giriş geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü var. aynı adres uzayında birden fazla akış kontrolü gerekebilir aynı adres uzayında çalışan paralel

Detaylı

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama

BMS-302 İleri Web Programlama. İş Parçacığı (Thread) ve Soket (Socket) Programlama BMS-302 İleri Web Programlama İş Parçacığı (Thread) ve Soket (Socket) Programlama İş Parçacıkları (Threads) Ana programa paralel çalışan işler oluşturmak için kullanılır Makine birden fazla çekirdeğe sahipse

Detaylı

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak: Published by Juan Soulié

C++ Giriş Ders 1 MSGSU Fizik Bölümü Ferhat ÖZOK Kullanılacak kaynak:  Published by Juan Soulié Kullanılacak kaynak: http://www.cplusplus.com/doc/tutorial/ Published by Juan Soulié C++ Nedir? Arttırılmış C demektir ve C dilinin geliştirilmiş halini yansıtır. C++ öğrenmeden önce herhangi bir programlama

Detaylı

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama C++ Dersi: Nesne Tabanlı Programlama Bölüm 11: Bileşim, Arkadaş ve Diğer Araçlar İçerik Bileşim Arkadaş Fonksiyonlar ve Sınıflar Arkadaş Fonksiyonlar Arkadaş Sınıflar Sabit Nesneler Sabit Üye Fonksiyonlar

Detaylı

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü

BM-209 Nesne Yönelimli Programlama. Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü BM-209 Nesne Yönelimli Programlama Yrd. Doç. Dr. İbrahim Alper Doğru Gazi Üniversitesi Teknoloji Fakültesi Bilgisayar Mühendisliği Bölümü Java Programlama Dili Java bayt kodları Java Sanal Makineleri üzerinde

Detaylı

İşletim Sistemlerine Giriş

İşletim Sistemlerine Giriş İşletim Sistemlerine Giriş Süreçler ve İş Parçacıkları(Thread) İşletim Sistemlerine Giriş - Ders03 1 Süreç -Tüm modern bilgisayarlarda bir çok iş aynı anda yapılabilir. *kullanıcı programları çalışır *disk

Detaylı

Nesne İşaretçileri. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik

Nesne İşaretçileri. Binnur Kurt Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. Sınıf Yapısı. Kalıtım Çok Şekillilik Binnur Kurt kurt@ce.itu.edu.tr Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi Sınıf Yapısı Kalıtım Çok Şekillilik Nesneye Dayalı Programlama 2 1 İşaretçiler, veri değil, verinin yerleşik bulunduğu

Detaylı

Giriş. İplik Modeli. geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü var.

Giriş. İplik Modeli. geleneksel işletim sistemlerinde her prosesin özel adres uzayı ve tek akış kontrolü var. Giriş 3 İPLİKLER geleneksel işletim sistemlerinde her in özel adres uzayı ve tek akış kontrolü var. aynı adres uzayında birden fazla akış kontrolü gerekebilir aynı adres uzayında çalışan paralel ler gibi

Detaylı

Android e Giriş. Öğr.Gör. Utku SOBUTAY

Android e Giriş. Öğr.Gör. Utku SOBUTAY Android e Giriş Öğr.Gör. Utku SOBUTAY Android İşletim Sistemi Hakkında 2 Google tarafından geliştirilmiştir. Dünyada en çok kullanılan mobil işletim sistemidir. 2018 itibariyle Dünyada Android; %78.65,

Detaylı

Akıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların

Akıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların Akıllı telefonlar, avuçiçi bilgisayarlar ile taşınabilir (cep) telefonların özelliklerini birleştiren cihazlardır. Akıllı telefonlar kullanıcıların bilgilerini saklamalarına, program yüklemelerine izin

Detaylı

İŞLETİM SİSTEMLERİ. (Operating Systems)

İŞLETİM SİSTEMLERİ. (Operating Systems) İŞLETİM SİSTEMLERİ (Operating Systems) İşletim Sistemi Tanımı, Görevleri, Bilinen İşletim Sistemleri Çok Kullanıcılı Sistemler, Bellek Yönetim Birimi Linux ve Windows Ailesi, Bilinen İşletim Sistemleri

Detaylı

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism ) Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism ) BBS-515 Nesneye Yönelik Programlama Ders #9 (16 Aralık 2009) Geçen ders: Java Applet lerde bileşen yerleştirme türleri ( applet layouts

Detaylı

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız. 1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız. [10 puan] int param = 30; int result = 300; if (param > 45) result

Detaylı

Sunum İçeriği. Programlamaya Giriş 22.03.2011

Sunum İçeriği. Programlamaya Giriş 22.03.2011 Programlamaya Giriş Nesne Tabanlı Programlamaya Giriş ve FONKSİYONLAR Sunum İçeriği Nesne Tabanlı Programlama Kavramı Fonksiyon tanımlama ve kullanma Formal Parametre nedir? Gerçel Parametre nedir? Fonksiyon

Detaylı

İşletim Sistemleri. Dr. Binnur Kurt binnur.kurt@gmail.com. Omega Eğitim ve Danışmanlık http://www.omegaegitim.com. İşletim Sistemleri

İşletim Sistemleri. Dr. Binnur Kurt binnur.kurt@gmail.com. Omega Eğitim ve Danışmanlık http://www.omegaegitim.com. İşletim Sistemleri İşletim Sistemleri Dr. Binnur Kurt binnur.kurt@gmail.com Omega Eğitim ve Danışmanlık http://www.omegaegitim.com 1 S a y f a İÇİNDEKİLER 1. İşletim Sistemi 2. Kabuk 3. Prosesler 4. İplikler 5. 6. Prosesler

Detaylı

Bölüm 4: Threads (İş Parçaları)

Bölüm 4: Threads (İş Parçaları) Bölüm 4: Threads (İş Parçaları) Mehmet Demirci tarafından çevrilmiştir. Silberschatz, Galvin and Gagne 2013 Bölüm 4: Threads (İş Parçaları) Genel bakış Çok çekirdekli programlama Çok iş parçalı modeller

Detaylı

1 PROGRAMLAMAYA GİRİŞ

1 PROGRAMLAMAYA GİRİŞ İÇİNDEKİLER IX İÇİNDEKİLER 1 PROGRAMLAMAYA GİRİŞ 1 Problem Çözme 1 Algoritma 1 Algoritmada Olması Gereken Özellikler 2 Programlama Dilleri 6 Programlama Dillerinin Tarihçesi 6 Fortran (Formula Translator)

Detaylı

PROCESS YARATIMI (TEKRAR):

PROCESS YARATIMI (TEKRAR): PROCESS YARATIMI (TEKRAR): Gecen haftaki dersten hatırlayabileceğiniz üzere, bir process başka bir process yaratabilmesi için UNIX sistemlerinde fork() sistem çağrısı kullaılıyordu. Başka bir process yaratan

Detaylı

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş Yard. Doç. Dr. Alper Kürşat Uysal Bilgisayar Mühendisliği Bölümü akuysal@anadolu.edu.tr Ders Web Sayfası: http://ceng.anadolu.edu.tr/ders.aspx?dersid=101

Detaylı

KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ

KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ KOCAELİ ÜNİVERSİTESİ MÜHENDİSLİK FAKÜLTESİ ELEKTRONİK VE HABERLEŞME MÜHENDİSLİĞİ Nesneye Yönelik Programlama C++ ile Beaglebone Black de Bluetooth Haberleşmesi Danışman: Yrd. Doç. Dr. Mehmet YAKUT Sinan

Detaylı

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, kabuk ve diğer temel kavramlar) Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu bulunmaktadır; 1. Performans: İşletim sistemi, makine

Detaylı

Bölüm 4: İş Parçacıkları. Operating System Concepts with Java 8 th Edition

Bölüm 4: İş Parçacıkları. Operating System Concepts with Java 8 th Edition Bölüm 4: İş Parçacıkları 14.1 Silberschatz, Galvin and Gagne 2009 Bölüm 4: İş Parçacıkları Genel Bakış Çoklu İş Parçacığı Modelleri İş Parçacığı Kütüphaneleri İş Parçacıkları ile İlgili Meseleler İşletim

Detaylı

4. Bölüm Programlamaya Giriş

4. Bölüm Programlamaya Giriş 4. Bölüm Programlamaya Giriş Algoritma ve Programlamaya Giriş Dr. Serkan DİŞLİTAŞ 4.1. C# ile Program Geliştirme Net Framework, Microsoft firması tarafından açık internet protokolleri ve standartları

Detaylı

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN Yrd. Doç. Dr. Caner ÖZCAN Diziler ile Pointer Arası İlişki Bir dizi adı sabit bir pointer gibi düşünülebilir. Diziler ile pointer lar yakından ilişkilidir. Pointer lar değişkenleri gösterdikleri gibi,

Detaylı

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama C++ Dersi: Nesne Tabanlı Programlama Bölüm 14: Çoklu İşlev İçerik Çoklu İşlevin Gerçekleştirilmesi Saf Sanal Fonksiyonlar ve Soyut Sınıflar Sanal Yıkıcı Fonksiyonlar Statik ve Dinamik Bağlama 2 Çoklu İşlev

Detaylı

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU

Diziler. Yrd.Doç.Dr.Bülent ÇOBANOĞLU Diziler Yrd.Doç.Dr.Bülent ÇOBANOĞLU Dizi (Array) Nedir? Bellekte sürekli yer kaplayan artarda sıralanmış aynı türden verilerin oluşturduğu kümeye dizi (array) denir. Dizi, çok fazla miktardaki tek tip

Detaylı

Bilgisayar İşletim Sistemleri BLG 312

Bilgisayar İşletim Sistemleri BLG 312 Bilgisayar İşletim Sistemleri BLG 312 İşletim Sistemlerine Giriş Bilgisayar Sistemi uygulama programları derleyici editör komut yorumlayıcı işletim sistemi makina dilinde programlar mikroprogram (ROM da)

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA NESNEYE YÖNELİK PROGRAMLAMA İŞARETÇİ ELEMANLI SINIFLAR REFERANSLAR OPERATÖRLERİN AŞIRI YÜKLENMESİ ATAMA OPERATÖRÜ Özlem AYDIN Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü İşaretçi Elemanlı Sınıflar

Detaylı

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar) Öğr.Gör. Dr. Dr. Şirin KARADENİZ

İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar) Öğr.Gör. Dr. Dr. Şirin KARADENİZ İŞLETİM SİSTEMİ KATMANLARI (Çekirdek, Kabuk ve diğer temel kavramlar) Öğr.Gör. Dr. Dr. Şirin KARADENİZ Bir işletim sisteminin yazılım tasarımında ele alınması gereken iki önemli konu bulunmaktadır; Performans:

Detaylı

Yrd. Doç. Dr. Caner ÖZCAN

Yrd. Doç. Dr. Caner ÖZCAN Yrd. Doç. Dr. Caner ÖZCAN Fonksiyonu Referans ile Çağırma (Call by Reference) Bir fonksiyona gönderilen parametrenin normalde değeri değişmez. Fonksiyon içinde yapılan işlemlerin hiçbiri argüman değişkeni

Detaylı

Sınav tarihi : Süre : 60 dak.

Sınav tarihi : Süre : 60 dak. Selçuk Üniversitesi, Mühendislik Fakültesi, Harita Mühendisliği Bölümü Final Sınavı Test Soruları Adı soyadı : Öğrenci no : Sınav tarihi : 31.05.2016 Süre : 60 dak. 1. Ekranda ne görüntülenir? int i =

Detaylı

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ http://www.cplusplus.com/doc/tutorial/ Published by Juan Soulié

BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ http://www.cplusplus.com/doc/tutorial/ Published by Juan Soulié BĠLGĠSAYAR PROGRAMLAMA II C++ Programlamaya GiriĢ http://www.cplusplus.com/doc/tutorial/ Published by Juan Soulié DERSİN WEB SİTESİ: http://nucleus.istanbul.edu.tr/~bilprog2/ DeğiĢkenler ve Data Türleri

Detaylı

YZM 2105 Nesneye Yönelik Programlama

YZM 2105 Nesneye Yönelik Programlama YZM 2105 Nesneye Yönelik Programlama Yrd. Doç. Dr. Deniz KILINÇ Celal Bayar Üniversitesi Hasan Ferdi Turgutlu Teknoloji Fakültesi Yazılım Mühendisliği 1 BÖLÜM - 5 Nesneye Yönelik Programlamaya Giriş Bu

Detaylı

Bölüm 9. Altprogramlar ISBN

Bölüm 9. Altprogramlar ISBN Bölüm 9 Altprogramlar ISBN 0-321-49362-1 Giriş Bu bölümde, programlarda sıkça kullanılan işlemlerin bir araya gruplanması ile oluşturulan altprogramlar incelenecektir. Altprogramlar sayesinde bir programda

Detaylı

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN 0-321-49362-1

Bölüm 11. Soyut veri tipleri ve kapsülleme kavramları ISBN 0-321-49362-1 Bölüm 11 Soyut veri tipleri ve kapsülleme kavramları ISBN 0-321-49362-1 11. Bölüm konuları Soyutlama kavramı Veri soyutlamasına giriş Soyut veri tipleri için tasarım konuları Dil örnekleri Parametreli

Detaylı

Bilgisayar İşletim Sistemleri BLG 312

Bilgisayar İşletim Sistemleri BLG 312 Prosesler Bilgisayar İşletim Sistemleri BLG 312 Prosesler ve Proses Yönetimi bilgisayar sisteminde birden fazla iş aynı anda etkin olabilir kullanıcı programı diskten okuma işlemi yazıcıdan çıkış alma

Detaylı

// hataları işaret eden referans

// hataları işaret eden referans System sınıfı java.lang.object java.lang.system public final class System extends Object System sınıfı, java.lang paketi içindedir. Platformdan bağımsız olarak sistem düzeyindeki eylemleri belirleyen dingin

Detaylı

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/ Ana Main Kodları /*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/ package javaapplication1; public class JavaApplication1 public static void

Detaylı

Süreç 1 Kavramı ve Oluşturma Yöntemleri

Süreç 1 Kavramı ve Oluşturma Yöntemleri İçindekiler Süreç Kavramı ve Oluşturma Yöntemleri...2 UNIX / Linux Sistemlerinde fork ve exec Sistem Çağrıları İle Süreç Kopyalama ve Çalıştırma...3 Thread Kavramı...7 Thread lerin İşletim Sistemleri Tarafından

Detaylı

BİL132 Bilgisayar Programlama II

BİL132 Bilgisayar Programlama II BİL132 Bilgisayar Programlama II 8. Olağandışı durumlar (exceptions) Hacettepe Üniversitesi Bilgisayar Mühendisliği Bölümü Yüksel Tarhan Olağandışı durum Kütük bulunamadı Diskte yer kalmadı Nesne referans

Detaylı

C++ ile Nesneye Dayalı Programlama

C++ ile Nesneye Dayalı Programlama Nesne İşaretçileri Binnur Kurt kurt@cs.itu.edu.tr Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi C++ ile Nesneye Dayalı Programlama 1 Sınıf Yapısı Kalıtım Nesneİşaretçileri Çok Şekillilik

Detaylı

TEMPLATES. Binnur Kurt kurt@cs.itu.edu.tr. Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1

TEMPLATES. Binnur Kurt kurt@cs.itu.edu.tr. Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi. C++ ile Nesneye Dayalı Programlama 1 PARAMETRİKÇOKŞEKİLLİLİK: TEMPLATES Binnur Kurt kurt@cs.itu.edu.tr Bilgisayar Mühendisliği Bölümü İstanbul Teknik Üniversitesi C++ ile Nesneye Dayalı Programlama 1 Sınıf Yapısı Kalıtım Çok Şekillilik Templates

Detaylı

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım

Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım Nisan 2009 9031150 - Temel Bilgisayar Bilimleri Ders Notu #4-2. kısım Referans: Bugün: 1. Ders Notları. Ders #4.1 Tekrar Dowhile ve for döngüleri Diziler Göstergeler 1. Tekrar for döngüleri Genel yazılımı

Detaylı

İsimler ve Kapsam. 24 Şubat 2011. Programlama Dilleri - Pamukkale Üniversitesi 1

İsimler ve Kapsam. 24 Şubat 2011. Programlama Dilleri - Pamukkale Üniversitesi 1 İsimler ve Kapsam Tanım: Bir değişkenin kapsamı (scope) değişkenin görülebilir olduğu komutların alanıdır. Görülebilir olduğu alan, bir komut içinde belirlenen değerle kullanılabildiği alandır. Tanım:

Detaylı

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş

Java 2 Standart Edition SDK Kurulum ve Java ya Giriş Kurulum için ilk önce Sun Microsystems in sitesinden uygun J2SE sürümünü indirin. Ben J2SE v1. 4. 2_16 Windows Installer paketini kullandım J2SE SDK Kurulumu aşağıdaki gibi başlayacaktır. 1 Kurulum tamamlandıktan

Detaylı

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2

Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2 1 Eclipse, Nesneler ve Java 2 Java Nereden Çıktı? 2 Eclipse Mimarisi 4 Java Teknolojisine Genel Bir Bakış 6 Taşınabilirlik 6 Java Derleyicisi ve Bytecode 6 Java Sanal Makinası (Java Virtual Machine - JVM)

Detaylı

C++0x - Sağ Taraf Değerine Bağlanan Referanslar (Rvalue References)

C++0x - Sağ Taraf Değerine Bağlanan Referanslar (Rvalue References) C++0x - Sağ Taraf Değerine Bağlanan Referanslar (Rvalue References) Kaan Aslan 25 Ağustos 2008 C++ a eklenmesine karar verilen yeni bir özellik de sağ taraf değerine bağlanan referanslardır. C++0x standart

Detaylı

İşletim Sistemleri. Dr. Binnur Kurt binnur.kurt@gmail.com. Omega Eğitim ve Danışmanlık http://www.omegaegitim.com. İşletim Sistemleri

İşletim Sistemleri. Dr. Binnur Kurt binnur.kurt@gmail.com. Omega Eğitim ve Danışmanlık http://www.omegaegitim.com. İşletim Sistemleri İşletim Sistemleri Dr. Binnur Kurt binnur.kurt@gmail.com Omega Eğitim ve Danışmanlık http://www.omegaegitim.com 1 S a y f a İÇİNDEKİLER 1. İşletim Sistemi 2. Kabuk 3. 4. İplikler 5. Arası İletişim 6. İş

Detaylı

İşletim Sistemleri. Dr. Binnur Kurt binnur.kurt@gmail.com. Omega Eğitim ve Danışmanlık http://www.omegaegitim.com. İşletim Sistemleri

İşletim Sistemleri. Dr. Binnur Kurt binnur.kurt@gmail.com. Omega Eğitim ve Danışmanlık http://www.omegaegitim.com. İşletim Sistemleri İşletim Sistemleri Dr. Binnur Kurt binnur.kurt@gmail.com Omega Eğitim ve Danışmanlık http://www.omegaegitim.com 1 S a y f a İçindekiler 1. 2. Kabuk 3. Prosesler 4. İplikler 5. Prosesler Arası İletişim

Detaylı

Lecture 11: Generics

Lecture 11: Generics BLM202E Data Structures Lecture 11: Generics Bilgisayar Mühendisliği Bölümü Öğr. Gör. Musa AYDIN 2014 2015 (Bahar) BLM202E Data Structures - 2015 Spring Java programlama dilinin güçlü özelliklerinden biri

Detaylı

Operatörlere Yeni İşlevler Yüklenmesi (Operator Overloading)

Operatörlere Yeni İşlevler Yüklenmesi (Operator Overloading) Operatörlere Yeni İşlevler Yüklenmesi (Operator Overloading) C++ da hazır olarak var olan operatörlere (+, -, *, /,!,

Detaylı

PORT HABERLEŞME SERİ PORT FARUK BOZAN

PORT HABERLEŞME SERİ PORT FARUK BOZAN PORT HABERLEŞME SERİ PORT FARUK BOZAN farukbozan@javatiryakileri.com bozanfaruk@gmail.com Merhaba değerli Java dostları. Bu yazımızda port haberleşme konusuna değineceğiz. Yalnız şu noktaya dikkatinizi

Detaylı

Qt ile Bir Ağ Uygulaması

Qt ile Bir Ağ Uygulaması Qt ile Bir Ağ Uygulaması Aykut Aksoy aykutaksoy@myway.com sürüm 1.0 Özet Bu belge Qt ile hazırlanmış bir ağ uygulamasını anlatır. C++ bilinmesi beklenir. Bu belgede "QProcess.h" kütüphanesine ağırlık verilmiştir.

Detaylı

BTEP243 Ders 3. class Yazım Kuralı:

BTEP243 Ders 3. class Yazım Kuralı: BTEP243 Ders 3 Sınıflar ve Nesneler Nesne tabanlı programlamada, programlamanın temeli sınıflardır (class). Nesnelerin yaratılmasında taslak (blueprint) görevi görür. Sınıflar; o Nesnelerin özelliklerinin

Detaylı

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama C++ Dersi: Nesne Tabanlı Programlama Bölüm 9: Sınıf İçerik Sınıf Tanımı Nesne Tanımı İkili Kapsam Çözme Operatörü UML ile Sınıfların Gösterimi 2 Sınıf kavramı, nesne-tabanlı programlamanın temelini oluşturur.

Detaylı

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) {

Fonksiyonlar. C++ ve NESNEYE DAYALI PROGRAMLAMA 51. /* Fonksiyon: kup Bir tamsayının küpünü hesaplar */ long int kup(int x) { Fonksiyonlar Kendi içinde bağımsız olarak çalışabilen ve belli bir işlevi yerine getiren program modülleridir. C programları bu modüllerden (fonksiyonlar) oluşurlar. Fonksiyonların yazılmasındaki temel

Detaylı

10/17/2007 Nesneye Yonelik Programlama 3.1

10/17/2007 Nesneye Yonelik Programlama 3.1 Procedure-Based Programming in C++ Çoğu gerçek dünya problemleri binlerce kod satırı gerektirir ( MS Windows NT 5.0 25 million dan fazla kod satırından oluşmaktadır). Yazılımın tasarımı, kodlanması ve

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR

NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR NESNEYE YÖNELİK PROGRAMLAMA SINIFLAR Özlem AYDIN Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü Not: Bu sunumda Prof. Dr. Yılmaz KILIÇASLAN ın Nesneye Yönelik Programlama dersi sunumlarından faydalanılmıştır.

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş

NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş Özlem AYDIN NESNEYE YÖNELİK PROGRAMLAMA C++ a Giriş Trakya Üniversitesi Bilgisayar Mühendisliği Bölümü C DİLİNİN BİR ÜST-KÜMESİ OLARAK C++ Genel olarak, C de mevcut olan her şey C++ da da vardır. C dilinde

Detaylı

String ve Karakter Dizileri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü

String ve Karakter Dizileri. Yrd. Doç. Dr. Fehim KÖYLÜ Erciyes Üniversitesi Bilgisayar Mühendisliği Bölümü String ve Karakter Dizileri #include Temel giriş çıkış akımları nesnelerinin tanımlandığı kütüphanedir. cin,cout,cerr,clog, wcin,wcout,wcerr,wclog nesneleri içerir. using namespace std; //std

Detaylı

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma

C de Detaylı Üs Alma Programı. C# Dilinde Metot Tanımlama ve Yazdırma C de Detaylı Üs Alma Programı Bu uygulama yazısında C de pow() fonksiyonunu kullanmadan üs hesabı yapan programı yazmaya çalıştım. Başta tanımladığım float tipinde 2 fonksiyon sayesinde + lı ve li üs değerleriyle

Detaylı

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi

Bil101 Bilgisayar Yazılımı I. M. Erdem ÇORAPÇIOĞLU Bilgisayar Yüksek Mühendisi Bil101 Bilgisayar Yazılımı I Bilgisayar Yüksek Mühendisi Editör Disk 1)Kaynak kodlar editör aracılığı ile oluşturulur. (.c) Kaynak dosya Önişleyici Disk 2)Önişleyici kodlar içerisindeki ilk işleme işini

Detaylı

BBS515 Nesneye Yönelik Programlama. Ders 1 Zümra Kavafoğlu

BBS515 Nesneye Yönelik Programlama. Ders 1 Zümra Kavafoğlu BBS515 Nesneye Yönelik Programlama Ders 1 Zümra Kavafoğlu Dersin Amacı Nesneye Yönelik Programlama Kavramını Java Dili Üzerinden Öğrenmek Nesneye yönelik programlama ile ilgili nesne, sınıf, kalıtım, çok

Detaylı

Görsel Programlama DERS 11. Görsel Programlama - Ders11/ 1

Görsel Programlama DERS 11. Görsel Programlama - Ders11/ 1 Görsel Programlama DERS 11 Görsel Programlama - Ders11/ 1 ÇOKLU KULLANIM(Multi Threading) Günümüz işletim sistemleri çok görevli(multi tasking) dir. Aynı anda farklı programlar çalışmakta, görevler yerine

Detaylı

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers)

BLM 112- Programlama Dilleri II. Hafta 5 İşaretçiler (Pointers) 1 BLM 112- Programlama Dilleri II Hafta 5 İşaretçiler (Pointers) Dr. Öğr. Üyesi Caner Özcan Hiç hata yapmayan insan, hiçbir şey yapmayan insandır. Ve hayatta en büyük hata, kendini hatasız sanmaktır. ~Y.

Detaylı

BİLG Dr. Mustafa T. Babagil 1

BİLG Dr. Mustafa T. Babagil 1 BİLG214 20.10.2009 Dr. Mustafa T. Babagil 1 Yapısal bilgi türlerinin tanımlanması. (C++ daki struct yapısı. ) Daha önce öğrenmiş olduğumuz bilgi tipleri char, int ve float v.b. değişkenler ile dizi (array)

Detaylı

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay.

PROGRAMLAMAYA GİRİŞ. Öğr. Gör. Ayhan KOÇ. Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay. PROGRAMLAMAYA GİRİŞ Öğr. Gör. Ayhan KOÇ Kaynak: Algoritma Geliştirme ve Programlamaya Giriş, Dr. Fahri VATANSEVER, Seçkin Yay., 2007 Algoritma ve Programlamaya Giriş, Ebubekir YAŞAR, Murathan Yay., 2011

Detaylı

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015

Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015 Arş.Gör.Muhammet Çağrı Gencer Bilgisayar Mühendisliği KTO Karatay Üniversitesi 2015 KONU BAŞLIKLARI 1. Yazılım Mimarisi nedir? 2. Yazılımda Karmaşıklık 3. Üç Katmanlı Mimari nedir? 4. Üç Katmanlı Mimari

Detaylı

İş Parçacıkları Thread(s)

İş Parçacıkları Thread(s) İş Parçacıkları Thread(s) Bir çok geliştirici programlarını doğrusal(linear) bir şekilde oluşturmaktadır. Böyle bir durumda tek bir processin işini bitirmesi beklenmekte ve ardından bir sonraki kod parçasına

Detaylı

BMH-303 Nesneye Yönelik Programlama

BMH-303 Nesneye Yönelik Programlama BMH-303 Nesneye Yönelik Programlama Kurucu metotlar (constructors) ve statik deyimi Dr. Musa ATAŞ Siirt Üniversitesi Bilgisayar Mühendisliği Kurucu Metotlar (Constructors) Kurucu metot çeşitleri Varsayılan

Detaylı

işlemler bittikten sonra dosyaların kapatılması uygun olacaktır. Bunun için, fclose(fin);

işlemler bittikten sonra dosyaların kapatılması uygun olacaktır. Bunun için, fclose(fin); case 2 : C = 0.5088-0.0011*(B-135); break; case 3 : C = 0.4978-0.0010*(B-145); break; case 4 : C = 0.4878-0.0009*(B-155); break; default : printf("yanlış seçenek\n");} cout

Detaylı

public class SalesLineItem // Java { private int quantity; private ProductSpecification description; public Money getsubtotal() {...

public class SalesLineItem // Java { private int quantity; private ProductSpecification description; public Money getsubtotal() {... Kodlama Sınıf tanımları yazılım sınıflarının diyagramlarından yararlanılarak oluşturulur. Karmaşık veri tiplerine (örneğin sınıf) sahip üyeler referans ya da işaretçi olarak yaratılmalılar. Basit nitelik

Detaylı

İşletim Sistemleri. İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık

İşletim Sistemleri. İşletim Sistemleri. Dr. Binnur Kurt Omega Eğitim ve Danışmanlık İşletim Sistemleri Dr. Binnur Kurt binnur.kurt@gmail.com Omega Eğitim ve Danışmanlık http://www.omegaegitim.com 1 S a y f a İÇİNDEKİLER 1. İşletim Sistemi 2. Kabuk 3. Prosesler 4. İplikler 5. İplikler

Detaylı

C++ Dersi: Nesne Tabanlı Programlama

C++ Dersi: Nesne Tabanlı Programlama C++ Dersi: Nesne Tabanlı Programlama Bölüm 6: Diziler İçerik Diziler Dizi Elemanlarına İlk Atama Diziler ve Fonksiyonlar İki Boyutlu Diziler İki Boyutlu Dizi Tanımı İki Boyutlu Dizi Elemanlarına Erişim

Detaylı

Pointers (İşaretçiler)

Pointers (İşaretçiler) Pointers (İşaretçiler) Pointers (İşaretçiler) Verilerin bilgisayar hafızasında tutulduğu fiziki alan adres olarak tanımlanabilir. Adres, hem donanımla hem de yazılımla ile ilişkilidir. Donanımsal açıdan

Detaylı

Binnur Kurt binnur.kurt@ieee.org. İstanbul Teknik Üniversitesi Bilgisayar MühendisliM

Binnur Kurt binnur.kurt@ieee.org. İstanbul Teknik Üniversitesi Bilgisayar MühendisliM İşletim Sistemleri Binnur Kurt binnur.kurt@ieee.org İstanbul Teknik Üniversitesi Bilgisayar MühendisliM hendisliği i BölümüB İşletim Sistemleri Copyright 2005 1 Version 0.0.1 About the Lecturer BSc İTÜ,

Detaylı

Operator Aşırı Yükleme (Operator OverLoading)

Operator Aşırı Yükleme (Operator OverLoading) Operator Aşırı Yükleme (Operator OverLoading) Operator Aşırı Yükleme Operatör metotları bir nesnenin ifadeler içinde operatörlerle kullanıldığı zaman davranışını belirler. Temel veri türleri için operatörler

Detaylı

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR

PROGRAMLAMAYA GİRİŞ FONKSİYONLAR PROGRAMLAMAYA GİRİŞ FONKSİYONLAR Fonksiyonlar C programlama dili fonksiyon olarak adlandırılan alt programların birleştirilmesi kavramına dayanır. Bir C programı bir ya da daha çok fonksiyonun bir araya

Detaylı

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI

İsimler ve Kapsam. Hafta 4 Ders 2 BLG339 PROGRAMLAMA DİLLERİ KAVRAMI BLG339 PROGRAMLAMA DİLLERİ KAVRAMI Hafta 4 Ders 2 Yrd. Doç. Dr. Melike Şah Direkoğlu Alındığı kaynak: Addison-Wesley s Programming Language Concepts slaytları ve Prof. Dr. Tuğrul Yılmaz ın ders notlarından

Detaylı

Nesneye Dayalı Programlama Laboratuvarı

Nesneye Dayalı Programlama Laboratuvarı 2013 2014 Nesneye Dayalı Programlama Laboratuvarı Ders Sorumlusu: Yrd. Doç. Dr. Salih GÖRGÜNOĞLU Laboratuvar Sorumluları: M. Zahid YILDIRIM İÇİNDEKİLER Deney 1: Visual Studio ve C++'a Giriş Uygulamaları...

Detaylı

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü

İşletim Sistemleri. Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü İşletim Sistemleri Hazırlayan: M. Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Bu dersin sunumları, Abraham Silberschatz, Greg Gagne, Peter B. Galvin, Operating System Concepts 9/e, Wiley,

Detaylı

Veri Yapıları Lab Notları 1

Veri Yapıları Lab Notları 1 C++ Programlama Dili Veri Yapıları Lab Notları 1 C++ dili, hızlı ve düşük seviye özelliklere erişmek isteyen uygulamaların yazılması için popüler bir dildir. C programlama diline birçok ekstra özellik

Detaylı

Örnek1: #include <iostream> #include <string> using namespace std;

Örnek1: #include <iostream> #include <string> using namespace std; BTEP243 Ders 5 Nesne İşaretçileri İşaretçiler, bildiğiniz gibi bir değişkenin bellekte tutuldukları yerin adresini tutarlar. Nesne işareçtileri konusundaki işaretçiler, nesnelerin bellek üzerinde bulundukları

Detaylı

Üst Düzey Programlama

Üst Düzey Programlama Üst Düzey Programlama Servlet Üst Düzey Programlama-ders01/ 1 Servlet Nedir? Web sayfaları ilk başlarda durağan bir yapıya sahipti ve kullanıcıdan bilgi alarak işlemler yapmıyordu. Zamanın geçmesiyle kullanıcıya

Detaylı

Kurucu Fonksiyonlar (Constructors)

Kurucu Fonksiyonlar (Constructors) Kurucu Fonksiyonlar (Constructors) Kurucu fonksiyonlar üyesi oldukları sınıftan bir nesne yaratılırken kendiliğinden canlanırlar. Bu tür fonksiyonlar bir nesnenin kurulması aşamasında yapılması gereken

Detaylı

public static int Toplam int x, int y

public static int Toplam int x, int y static Kavramı 1 İçinde bulunduğu sınıftan nesne oluşturulmadan veya hiç bir nesneye referans olmadan kullanılabilen üyeler static olarak nitelendirilir. Metotlar ve alanlar static olarak tanımlanabilir.

Detaylı

Statik veri üyeleri sınıf dosyası içerisinde, ancak sınıf bildirimi dışında başlatılmalıdır. Statik üye fonksiyonları

Statik veri üyeleri sınıf dosyası içerisinde, ancak sınıf bildirimi dışında başlatılmalıdır. Statik üye fonksiyonları Statik Veri Üye ve Metotlar Genel olarak bir sınıfa ait nesnelerin verileri bellekte farklı bölgelerde yer alır. Ancak bazı durumlarda, belirli bir üyenin ortak bir alanda tek bir kopyasının bulunması

Detaylı

OpenGL Uygulamaları. 1. Giriş. 2. OpenGL. Deney 2

OpenGL Uygulamaları. 1. Giriş. 2. OpenGL. Deney 2 Deney 2 OpenGL Uygulamaları 1. Giriş Günümüzde yazılım ve donanımın gelişmesi ile birlikte bilgisayar grafikleri alanında oldukça önemli gelişmeler kaydedilmektedir. Bu gelişmelere paralel olarak yazılım

Detaylı

İşletim Sistemleri-II

İşletim Sistemleri-II EGE ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ İşletim Sistemleri-II Ödev-II Barış Taşkend 05090000006 16.02.2012 İçindekiler 1. Barrier... 2 1.1. Giriş... 2 1.2. Barrier Nedir ve Nasıl Çalışır?... 2 1.2.1.

Detaylı

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Uzaktan Eğitim Uygulama ve Araştırma Merkezi JAVA PROGRAMLAMA DİLİ Öğr. Gör. Utku SOBUTAY İÇERİK 2 Java Programlama Diline Giriş Java Platform Çeşitleri Java nın Kodlama ve Çalışma Adımları Java Derleyicisi, Java Yorumlayıcısı Java Çöp Toplayıcısı

Detaylı

Programlama Dili Prensipleri. Lab Notları 1

Programlama Dili Prensipleri. Lab Notları 1 Programlama Dillerinin Tarihçesi: Programlama Dili Prensipleri Lab Notları 1 1. Derleme Bir Programın derlenme süreci 1 Lexical: Sözdizimsel analiz. Lexeme: Bir programlama dilindeki en düşük düzeyli sözdizimsel

Detaylı

Windows'da çalışırken pek çok durumda bir işe başlamadan önce işletim sisteminin o işe ilişkin bilgileri depolayacağı bir alan yaratması gerekir.

Windows'da çalışırken pek çok durumda bir işe başlamadan önce işletim sisteminin o işe ilişkin bilgileri depolayacağı bir alan yaratması gerekir. Handel Kavramı: Windows'da çalışırken pek çok durumda bir işe başlamadan önce işletim sisteminin o işe ilişkin bilgileri depolayacağı bir alan yaratması gerekir. Alanın yaratıldığı bölge Windows'un kendi

Detaylı

BİL-141 Bilgisayar Programlama I (Java)

BİL-141 Bilgisayar Programlama I (Java) 1 BİL-141 Bilgisayar Programlama I (Java) Hazırlayan: M.Ali Akcayol Gazi Üniversitesi Bilgisayar Mühendisliği Bölümü Not: Bu dersin sunumları, Java Bilgisayar Programlamaya Giriş, A. Yazıcı, E. Doğdu,

Detaylı

NESNEYE YÖNELİK PROGRAMLAMA

NESNEYE YÖNELİK PROGRAMLAMA NESNEYE YÖNELİK PROGRAMLAMA Metotlar Şu ana kadar yaptığımız örneklerde hep önceden hazırlanmış ReadLine(), WriteLine() vb. gibi metotları kullandık. Artık kendi metotlarımızı yapmanın zamanı geldi. Bilmem

Detaylı

JAVA API v2.0 Belge sürümü: 2.0.2

JAVA API v2.0 Belge sürümü: 2.0.2 JAVA API v2.0 Belge sürümü: 2.0.2 1. İçindekiler 1. İÇİNDEKİLER... 2 2. BU BELGENİN AMACI... 3 3. BELGE SÜRÜMLERİ... 3 4. SİSTEM GEREKSİNİMLERİ... 3 5. KULLANIM ŞEKLİ... 4 5.1. GENEL... 4 5.2. UYARILAR...

Detaylı