Yönetim Bilişim Sistemleri
Lisans TYYÇ: 6. Düzey QF-EHEA: 1. Düzey EQF-LLL: 6. Düzey

Ders Genel Tanıtım Bilgileri

Ders Kodu: MIS2005
Ders İsmi: Nesne Tabanlı Programlama
Ders Yarıyılı: Güz
Ders Kredileri:
Teorik Pratik Kredi AKTS
2 2 3 6
Öğretim Dili: TR
Ders Koşulu:
Ders İş Deneyimini Gerektiriyor mu?: Hayır
Dersin Türü: Zorunlu
Dersin Seviyesi:
Lisans TYYÇ:6. Düzey QF-EHEA:1. Düzey EQF-LLL:6. Düzey
Dersin Veriliş Şekli: Yüz yüze
Dersin Koordinatörü: Dr.Öğr.Üyesi Melike KARATAY
Dersi Veren(ler):
Dersin Yardımcıları:

Dersin Amaç ve İçeriği

Dersin Amacı: Bu dersin temel amacı, nesne yönelimli programlama paradigmasının ileri düzey kavramlarını Python programlama dili aracılığıyla detaylı biçimde öğretmektir. Öğrencilerin yazılım geliştirme sürecinde nesne tabanlı yaklaşımı etkin ve doğru bir şekilde kullanabilmeleri hedeflenmektedir. Ders kapsamında sınıflar ve nesneler, kalıtım (inheritance), çok biçimlilik (polymorphism), kapsülleme (encapsulation) gibi temel OOP ilkeleri derinlemesine ele alınacak; ayrıca istisna yönetimi, dekoratörler, jeneratörler, özel veri yapıları, yazılım test teknikleri, tasarım desenleri ve çok iş parçacıklı programlama gibi ileri düzey konulara odaklanılacaktır. Böylece öğrencilerin sürdürülebilir, yeniden kullanılabilir ve ölçeklenebilir yazılım çözümleri geliştirebilmeleri amaçlanmaktadır.
Dersin İçeriği: Python Programlama Diline Giriş
Nesne Yönelimli Programlamanın (OOP) Temelleri
Sınıflar ve Nesneler
Kapsülleme ve Veri Gizleme
Kalıtım ve Kodun Yeniden Kullanımı
Çok Biçimlilik ve Dinamik Bağlama
Soyut Sınıflar ve Arayüzler
Hata Yakalama ve Güvenilir Program Tasarımı
İleri Seviye Özellikler: Dekoratörler, Jeneratörler ve Yineleyiciler
Python’da Özel Veri Yapıları
Tasarım Desenleri (örn. Singleton, Factory, Strategy, Observer)
Kodun Yeniden Yapılandırılması (Refactoring) ve En İyi Uygulamalar
Birim Testi ve Test Odaklı Geliştirme
Hata Ayıklama Teknikleri ve Araçları
Python’da Eşzamanlılık ve Çok İş Parçacığı (Multithreading)
Ölçeklenebilir ve Sürdürülebilir Yazılım Sistemleri Geliştirme
Uygulamalı Projeler ve Gerçek Dünya Senaryoları

Öğrenme Kazanımları

Bu dersi başarıyla tamamlayabilen öğrenciler;
Öğrenme Kazanımları
1 - Bilgi
Kuramsal - Olgusal
2 - Beceriler
Bilişsel - Uygulamalı
3 - Yetkinlikler
İletişim ve Sosyal Yetkinlik
Öğrenme Yetkinliği
Alana Özgü Yetkinlik
Bağımsız Çalışabilme ve Sorumluluk Alabilme Yetkinliği

Ders Akış Planı

Hafta Konu Ön Hazırlık
1) Python kurulum, temel söz dizimi, veri tipleri, değişkenler, operatörler, giriş/çıkış işlemleri Python resmi dokümantasyonu (python.org), “Python Crash Course” giriş bölümleri. Python ve bir IDE (PyCharm, VSCode) kurulumu, temel terminal komutlarını öğrenme.
2) OOP kavramları (nesne, sınıf, özellik, metot), neden OOP kullanılır, prosedürel ve nesne yönelimli farkı UML sınıf diyagramları, basit sınıf örnekleri. “What is OOP?” yazıları, Python’da ilk basit sınıf denemesi.
3) __init__ metodu, self parametresi, nesne oluşturma, örnek metotlar ve özellikler Örnek Python sınıf uygulamaları. Basit “Kitap” veya “Öğrenci” sınıfı örneği yazma.
4) Public, protected, private alanlar; getter ve setter metotları; property dekoratörü. @property kullanımı örnekleri. Mevcut sınıflara veri gizleme ekleme çalışması.
5) Temel kalıtım, çoklu kalıtım, super() metodu, is-a ilişkisi Kalıtım örnekleri, UML diyagramları. “Araç” sınıfından türetilmiş “Otomobil” ve “Motosiklet” sınıfları yazma.
6) Metot geçersiz kılma (override), duck typing, abstract base class mantığına giriş Python abc modülü örnekleri. Farklı alt sınıflar için aynı metot adını kullanarak polimorfizm denemesi.
7) Soyut metotlar, arayüz benzeri yapı, çoklu soyutlama abc modülü detaylı anlatım. Bir “Şekil” sınıfı tasarlayıp alt sınıflarda alan/çevre hesaplaması.
8) try-except-finally, özel exception sınıfları, hata yönetimi Python exception hiyerarşisi tablosu. Kullanıcıdan alınan verilerde hata kontrolü ekleme.
9) Dekoratörler, jeneratörler, yineleyiciler (__iter__, __next__). Örnek dekoratör uygulamaları, generator comprehension. Basit bir logging dekoratörü yazma.
10) namedtuple, deque, defaultdict, Counter, OrderedDict, özel sınıf tabanlı veri yapıları. collections modülü dokümantasyonu. Küçük bir öğrenci not sistemi veri yapısı tasarlama.
11) Singleton, Factory, Strategy, Observer desenleri. Python ile tasarım desenleri kitap/örnekleri. Basit bir “Factory” deseni ile nesne üretme.
12) Refactoring teknikleri, PEP 8 standartları, modüler kod. “Refactoring” kitabından bölümler, Python PEP 8 rehberi. Önceki ödevlerden birini yeniden düzenleme.
13) unittest modülü, test odaklı geliştirme, hata ayıklama araçları (pdb). unittest dokümantasyonu, Pytest giriş. Basit fonksiyonlar için test senaryoları yazma.
14) threading, multiprocessing, async/await yapısı; öğrenci projelerinin sunumu. Python concurrency dokümantasyonu. Proje kodunu bitirme ve sunuma hazırlanma.

Kaynaklar

Ders Notları / Kitaplar:
Diğer Kaynaklar: 1- Fluent Python: Clear, Concise, and Effective Programming
Yazar: Luciano Ramalho

2- Python 3 Object-Oriented Programming
Yazar: Dusty Phillips

3- Mastering Python Design Patterns
Yazar: Kamon Ayeva, Sakis Kasampalis

Ders - Program Öğrenme Kazanım İlişkisi

Ders Öğrenme Kazanımları
Program Kazanımları
1) Türkçe ve İngilizce dillerini kullanarak mesleki, güncel ve gelişen eğilimleri takip edebilmek; gerekli bilgileri yazılı ve sözlü olarak aktarabilmek.
1) Bilgisayar donanımını tanıyabilmek; parçaların teknik özelliklerini ayırt edebilmek, karşılaştırabilmek, sınıflandırabilmek ve uygun donanım seçimini yapabilmek.
1) Projelerde YBS uzmanı olarak tasarım yapabilmek; projelere yönetici veya çalışan olarak katkı sağlayabilmek ve yenilikçi fikirler üretebilmek.
1) Bir bilişim sistemi probleminin takım çalışması ile çözümünde, problemin her aşamasında bireysel sorumluluk alabilmek, takıma katkı sağlayabilmek ve gerektiğinde liderlik yapabilmek.
1) Bilgi Teknolojileri ve İşletme Bilimi alanlarında edindiği bilgileri karar verme amacıyla uygun araçlarla kullanabilmek.
2) Alanında edindiği bilgi ve becerileri farklı disiplinlerle entegre ederek eleştirel bir bakış açısıyla değerlendirebilmek.
2) Yazılım türleri, yazılım seçimi ve temini konularında bilgi sahibi olmak; yazılım geliştirme süreçlerini planlayıp yönetebilmek.
2) Farklı disiplinlerin Yönetim Bilişim Sistemleri (YBS) tabanlı problem çözümünde veri ihtiyaçlarını belirleyebilmek, bu verileri temin edebilmek ve verileri derleyerek bilgi üretebilmek ve kullanıma hazır hâle getirebilmek.
2) Mesleki çalışmalarda toplumsal ve etik değerlere uygun hareket edebilmek.
3) Bilgi sistemi gereksinimlerini belirleyebilmek, sistem analizi yapabilmek ve tasarımını gerçekleştirebilmek.
3) Uygulamalar için gerekli olan veritabanı tasarımını gerçekleştirebilmek.
4) Bilgisayar ağ sistemini kurabilmek; ağlar ve donanımlarla ilgili karşılaşılan sorunları çözebilmek.
4) Bir YBS veya sosyal problemin çözümüne yönelik proje tasarlayabilmek ve alternatif çözüm yöntemleri önerebilmek.

Ders - Öğrenme Kazanımı İlişkisi

Etkisi Yok 1 En Düşük 2 Düşük 3 Orta 4 Yüksek 5 En Yüksek
           
Dersin Program Kazanımlarına Etkisi Katkı Payı
1) Türkçe ve İngilizce dillerini kullanarak mesleki, güncel ve gelişen eğilimleri takip edebilmek; gerekli bilgileri yazılı ve sözlü olarak aktarabilmek.
1) Bilgisayar donanımını tanıyabilmek; parçaların teknik özelliklerini ayırt edebilmek, karşılaştırabilmek, sınıflandırabilmek ve uygun donanım seçimini yapabilmek.
1) Projelerde YBS uzmanı olarak tasarım yapabilmek; projelere yönetici veya çalışan olarak katkı sağlayabilmek ve yenilikçi fikirler üretebilmek.
1) Bir bilişim sistemi probleminin takım çalışması ile çözümünde, problemin her aşamasında bireysel sorumluluk alabilmek, takıma katkı sağlayabilmek ve gerektiğinde liderlik yapabilmek.
1) Bilgi Teknolojileri ve İşletme Bilimi alanlarında edindiği bilgileri karar verme amacıyla uygun araçlarla kullanabilmek.
2) Alanında edindiği bilgi ve becerileri farklı disiplinlerle entegre ederek eleştirel bir bakış açısıyla değerlendirebilmek.
2) Yazılım türleri, yazılım seçimi ve temini konularında bilgi sahibi olmak; yazılım geliştirme süreçlerini planlayıp yönetebilmek.
2) Farklı disiplinlerin Yönetim Bilişim Sistemleri (YBS) tabanlı problem çözümünde veri ihtiyaçlarını belirleyebilmek, bu verileri temin edebilmek ve verileri derleyerek bilgi üretebilmek ve kullanıma hazır hâle getirebilmek.
2) Mesleki çalışmalarda toplumsal ve etik değerlere uygun hareket edebilmek.
3) Bilgi sistemi gereksinimlerini belirleyebilmek, sistem analizi yapabilmek ve tasarımını gerçekleştirebilmek.
3) Uygulamalar için gerekli olan veritabanı tasarımını gerçekleştirebilmek.
4) Bilgisayar ağ sistemini kurabilmek; ağlar ve donanımlarla ilgili karşılaşılan sorunları çözebilmek.
4) Bir YBS veya sosyal problemin çözümüne yönelik proje tasarlayabilmek ve alternatif çözüm yöntemleri önerebilmek.

Öğrenme Etkinliği ve Öğretme Yöntemleri

Ölçme ve Değerlendirme Yöntemleri ve Kriterleri

Ölçme ve Değerlendirme

Yarıyıl İçi Çalışmaları Aktivite Sayısı Katkı Payı
Toplam %
YARIYIL İÇİ ÇALIŞMALARININ BAŞARI NOTU KATKISI % 0
YARIYIL SONU ÇALIŞMALARININ BAŞARI NOTUNA KATKISI %
Toplam %