Dart Uygulama Sınavı: Pardus ETAP 23 Kurulum Otomasyonu
Pardus ETAP 23 kurulum sürecini bir yazılım senaryosuna dönüştürmek, Dart dilinin temel mantığını (değişkenler, döngüler, fonksiyonlar ve OOP) pekiştirmek için çok etkili bir yöntem.
Senaryo: Bir okulun BT koordinatörüsünüz. Okuldaki etkileşimli tahtalara Pardus ETAP 23 kurulumunu yönetmek, sistem gereksinimlerini kontrol etmek ve kullanıcı hesaplarını oluşturmak için bir komut satırı aracı geliştiriyorsunuz.
Bölüm 1: Değişkenler, Operatörler ve Veri Tipleri
Soru 1: Aşağıdaki değişkenleri uygun veri tipleriyle tanımlayın ve ekrana anlamlı bir cümle olarak yazdırın:
İşletim sistemi adı (Pardus ETAP)
Sürüm numarası (23.4)
Kurulum yapılacak tahta sayısı (Örn: 24)
Kurulumun başarıyla tamamlanıp tamamlanmadığı bilgisi (bool)
Soru 2: Bir akıllı tahtanın toplam disk alanı 240 GB'tır. Pardus ETAP kurulumu 40 GB yer kaplamaktadır. Kalan alanı hesaplayan ve ekrana yazdıran kodu aritmetik operatörler kullanarak yazın.
Bölüm 2: Kullanıcı Etkileşimi ve String İşlemleri
Soru 3: stdin.readLineSync() kullanarak kullanıcıdan (öğretmenden) ismini ve branşını alın.
Girilen ismi tamamen büyük harfe çevirin.
Branş ismindeki boşlukları temizleyin (trim).
String interpolation kullanarak:
"Sayın [İsim], [Branş] sınıfı için ETAP 23 kurulumu başlıyor..."mesajını yazdırın.
Bölüm 3: Kontrol Akışı (If-Else & Switch-Case)
Soru 4: Bir sistem gereksinim kontrolü yapın.
Eğer RAM 4GB'dan düşükse "Yetersiz RAM, ETAP 23 kurulamaz" yazdırın.
Eğer RAM 4GB ve üzeri ise "Kurulum başlatılıyor..." yazdırın.
Soru 5: switch-case kullanarak kurulum modunu seçin:
1ise "Hızlı Kurulum"2ise "Gelişmiş Kurulum"3ise "Sistem Onarma"Diğer durumlarda "Geçersiz Seçim" mesajını verin.
Bölüm 4: Döngüler (Loops)
Soru 6: Okulda 1'den 10'a kadar numaralandırılmış sınıflar var. for döngüsü kullanarak her bir sınıf için "Sınıf-[no] tahtasına imaj yükleniyor..." yazdırın.
Soru 7: Bir tahta şifresi belirlenene kadar kullanıcıdan giriş isteyen bir do-while döngüsü yazın. (Şifre en az 6 karakter olmalıdır).
Bölüm 5: Fonksiyonlar ve Null Safety
Soru 8: ipAdresiOlustur adında bir fonksiyon yazın.
Bu fonksiyon
odaNo(int) vetahtaNo(int) parametrelerini alsın.Geriye
192.168.[odaNo].[tahtaNo]formatında bir String döndürsün.
Soru 9 (Null Safety): Kurulum sırasında "Ek Dosya" yolu null olabilir. String? ekDosyaYolu değişkeni tanımlayın. Eğer bu değişken null ise varsayılan olarak "/home/etap/indirilenler" yolunu atayan (?? operatörü ile) kodu yazın.
Bölüm 6: Nesne Yönelimli Programlama (OOP)
Soru 10: Aşağıdaki özelliklere sahip bir AkilliTahta sınıfı oluşturun:
Özellikler:
seriNo(String),islemci(String),aktifMi(bool).Metot:
bilgileriGoster()(Tahta bilgilerini ekrana yazdıracak).
Soru 11 (Kalıtım): AkilliTahta sınıfından türeyen bir VestelFaz3 sınıfı oluşturun.
Ek olarak
dokunmatikHassasiyeti(int) özelliği ekleyin.bilgileriGostermetodunuoverrideederek yeni özelliği de ekranda gösterin.
Sınav Kriterleri
Koleksiyon yapılarını (List, Map vb.) kullanmayın.
Kodlarınızı
main.dartdosyası içinde yapılandırın.Değişken isimlendirmelerinde Dart standartlarına (
camelCase) uyun.
Bu haliyle sınav, temel programlama yeteneklerini ve OOP mantığını ölçmek için oldukça kapsamlı oldu.
Pardus ETAP 23 Kurulum Otomasyonu (Çözüm Anahtarı)
Aşağıdaki kodu bir main.dart dosyasına yapıştırarak sonuçları görebilirsiniz:
import 'dart:io';
// --- Bölüm 6: Nesne Yönelimli Programlama (OOP) ---
class AkilliTahta {
String seriNo;
String islemci;
bool aktifMi;
AkilliTahta(this.seriNo, this.islemci, this.aktifMi);
void bilgileriGoster() {
print("--- Tahta Bilgileri ---");
print("Seri No: $seriNo");
print("İşlemci: $islemci");
print("Durum: ${aktifMi ? 'Aktif' : 'Pasif'}");
}
}
// Bölüm 6.1: Kalıtım (Inheritance)
class VestelFaz3 extends AkilliTahta {
int dokunmatikHassasiyeti;
VestelFaz3(String seriNo, String islemci, bool aktifMi, this.dokunmatikHassasiyeti)
: super(seriNo, islemci, aktifMi);
@override
void bilgileriGoster() {
super.bilgileriGoster();
print("Dokunmatik Hassasiyeti: $dokunmatikHassasiyeti/10");
}
}
// --- Bölüm 5: Fonksiyonlar ---
String ipAdresiOlustur(int odaNo, int tahtaNo) {
return "192.168.$odaNo.$tahtaNo";
}
void main() {
// --- Bölüm 1: Değişkenler ve Operatörler ---
String isletimSistemi = "Pardus ETAP";
double surum = 23.4;
int tahtaSayisi = 24;
bool kurulumBasarili = true;
int toplamDisk = 240;
int etapBoyut = 40;
int kalanDisk = toplamDisk - etapBoyut;
print("Sistem: $isletimSistemi $surum | Tahta Sayısı: $tahtaSayisi");
print("Kurulum sonrası kalan disk alanı: $kalanDisk GB\n");
// --- Bölüm 2: Kullanıcı Etkileşimi ---
print("Lütfen adınızı giriniz:");
String? isim = stdin.readLineSync();
print("Branşınızı giriniz:");
String? brans = stdin.readLineSync();
String formatliIsim = isim?.toUpperCase() ?? "BİLİNMEYEN";
String formatliBrans = brans?.trim() ?? "GENEL";
print("Sayın $formatliIsim, $formatliBrans sınıfı için kurulum başlıyor...\n");
// --- Bölüm 3: Kontrol Akışı (If & Switch) ---
int ram = 8; // Örnek RAM miktarı
if (ram < 4) {
print("HATA: Yetersiz RAM, ETAP 23 kurulamaz.");
return; // Programı sonlandır
} else {
print("Sistem kontrolü başarılı: Kurulum başlatılıyor...");
}
print("\nKurulum Modu Seçin (1: Hızlı, 2: Gelişmiş, 3: Onarma):");
String? secim = stdin.readLineSync();
switch (secim) {
case '1':
print("Mod: Hızlı Kurulum seçildi.");
break;
case '2':
print("Mod: Gelişmiş Kurulum seçildi.");
break;
case '3':
print("Mod: Sistem Onarma seçildi.");
break;
default:
print("Geçersiz seçim yapıldı.");
}
// --- Bölüm 4: Döngüler ---
print("\n--- Sınıf İmaj Yükleme İşlemi ---");
for (int i = 1; i <= 5; i++) {
print("Sınıf-$i tahtasına imaj yükleniyor...");
}
String sifre = "";
do {
print("\nLütfen yeni bir tahta şifresi belirleyin (min 6 karakter):");
sifre = stdin.readLineSync() ?? "";
} while (sifre.length < 6);
print("Şifre başarıyla kaydedildi.");
// --- Bölüm 5: Null Safety ---
String? ekDosyaYolu;
// ekDosyaYolu null olduğu için varsayılan değeri atayalım
String finalYol = ekDosyaYolu ?? "/home/etap/indirilenler";
print("\nEk dosyalar şu konuma kontrol edilecek: $finalYol");
// Fonksiyon kullanımı
String ip = ipAdresiOlustur(101, 5);
print("Tahta için atanan IP: $ip\n");
// --- Bölüm 6: OOP Uygulaması ---
var yeniTahta = VestelFaz3("VT-2026-X", "Intel i5", true, 9);
yeniTahta.bilgileriGoster();
print("\n--- KURULUM TAMAMLANDI: $kurulumBasarili ---");
}
Bu Sınav Neleri Test Etti?
Değişkenler: Veri tiplerini (
int,double,String,bool) doğru kullanma.Null Safety:
?,??venullkontrolü ile güvenli kod yazma.Mantıksal Döngüler:
forile tekrarlı işler,do-whileile veri doğrulama.OOP: Sınıf yapısı, miras alma ve metot ezme (
override) yeteneği.Giriş/Çıkış: Kullanıcıdan veri alma ve veriyi formatlayarak sunma.
Dart Uygulama Sınavı: B GRUBU
Senaryo: Okulunuzdaki Pardus ETAP 23 sistemlerini denetlemek ve konfigüre etmek için bir "Sistem Denetim Aracı" kodluyorsunuz.
1. BÖLÜM: Sorular
Soru 1 (Değişkenler): Aşağıdaki bilgileri tutan değişkenleri tanımlayın:
Okul Adı (String)
Mevcut SSD Kapasitesi (int - Örn: 120)
ETAP Güncelleme Versiyonu (double - Örn: 23.1)
Sistemin "Etkileşimli" modda olup olmadığı (bool)
Soru 2 (Operatörler): Bir akıllı tahtada 120 GB SSD bulunmaktadır. İşletim sistemi 30 GB, yedekleme dosyaları ise 15 GB yer kaplamaktadır. Kalan boş alanı hesaplayıp ekrana yazdıran kodu yazın.
Soru 3 (String & Input): Kullanıcıdan "Okulun Bulunduğu İlçe" ve "Teknisyen Adı" bilgilerini alın.
Teknisyen adının başına "Sn. " ifadesini ekleyin.
İlçe isminin içindeki 'a' harflerini 'e' ile değiştirin (replace).
Hepsini büyük harf yaparak ekrana yazdırın.
Soru 4 (Kontrol Yapıları): * If-Else: SSD kapasitesi 100 GB'dan küçükse "Düşük Kapasite: Disk Değişimi Önerilir", değilse "Disk Alanı Yeterli" yazdırın.
Switch-Case: Kullanıcıdan bir dil seçeneği (TR, EN, FR) alın ve seçilen dile göre "Sistem dili [Dil] olarak ayarlandı" mesajını verin.
Soru 5 (Döngüler): * while döngüsü kullanarak %0'dan %100'e kadar 20'şer 20'şer artan bir "Güncelleme Yükleniyor" simülasyonu yapın.
fordöngüsü ile 10'dan geriye doğru (10, 9, 8...) sayan bir sistem kapanış sayacı hazırlayın.
Soru 6 (Fonksiyonlar & Null Safety):
tarihFormatlaisimli bir fonksiyon yazın.gun,ay,yil(int) alıpgun/ay/yilşeklinde bir String döndürsün.String? teknikNotdeğişkeni tanımlayın. Eğer kullanıcı not girmediyse (null ise) "Not girilmedi" yazdırın.
Soru 7 (OOP - Nesne Yönelimli Programlama):
SistemBirimiadında bir sınıf oluşturun. Özellikler:islemci,ram,depolama.Bu sınıftan türeyen
EtapTahtasınıfı oluşturun. Ek özellik:fazNumarasi(int).sistemBilgisi()isimli bir metodu override ederek tüm özellikleri ekrana yazdırın.
2. BÖLÜM: Çözüm Anahtarı (B Grubu)
import 'dart:io';
// --- Bölüm 7: OOP Yapısı ---
class SistemBirimi {
String islemci;
int ram;
int depolama;
SistemBirimi(this.islemci, this.ram, this.depolama);
void sistemBilgisi() {
print("İşlemci: $islemci | RAM: ${ram}GB | Depolama: ${depolama}GB");
}
}
class EtapTahta extends SistemBirimi {
int fazNumarasi;
EtapTahta(String islemci, int ram, int depolama, this.fazNumarasi)
: super(islemci, ram, depolama);
@override
void sistemBilgisi() {
print("--- ETAP TAHTA SİSTEM RAPORU ---");
super.sistemBilgisi();
print("Faz Durumu: Faz $fazNumarasi");
}
}
// --- Bölüm 6: Fonksiyon ---
String tarihFormatla(int gun, int ay, int yil) {
return "$gun/$ay/$yil";
}
void main() {
// Soru 1 & 2: Değişkenler ve Operatörler
String okulAdi = "Atatürk Mesleki ve Teknik Anadolu Lisesi";
int ssdKapasite = 120;
double etapVersiyon = 23.1;
bool etkilesimliMod = true;
int osBoyut = 30;
int yedekBoyut = 15;
int kalanAlan = ssdKapasite - (osBoyut + yedekBoyut);
print("Okul: $okulAdi | Versiyon: $etapVersiyon");
print("Kalan SSD Alanı: $kalanAlan GB\n");
// Soru 3: String İşlemleri
print("Lütfen ilçe giriniz:");
String ilce = stdin.readLineSync() ?? "";
print("Teknisyen adı:");
String teknisyen = stdin.readLineSync() ?? "";
String yeniIlce = ilce.replaceAll('a', 'e').toUpperCase();
String yeniTeknisyen = "Sn. ${teknisyen.toUpperCase()}";
print("Görevli: $yeniTeknisyen | Bölge: $yeniIlce\n");
// Soru 4: Kontrol Yapıları
if (ssdKapasite < 100) {
print("UYARI: Düşük Kapasite: Disk Değişimi Önerilir.");
} else {
print("DURUM: Disk Alanı Yeterli.");
}
print("Dil Seçin (TR, EN, FR):");
String? dil = stdin.readLineSync()?.toUpperCase();
switch (dil) {
case "TR":
print("Sistem dili Türkçe olarak ayarlandı.");
break;
case "EN":
print("Sistem dili İngilizce olarak ayarlandı.");
break;
default:
print("Desteklenmeyen dil, varsayılan dile dönülüyor.");
}
// Soru 5: Döngüler
print("\n--- Güncelleme Denetleniyor ---");
int yukleme = 0;
while (yukleme <= 100) {
print("Yükleniyor: %$yukleme");
yukleme += 20;
}
print("\n--- Sistem Yeniden Başlatılıyor ---");
for (int i = 5; i >= 1; i--) {
print("Kapanışa kalan: $i saniye...");
}
// Soru 6: Null Safety & Fonksiyon
String? teknikNot; // Veri tabanından null geldiğini varsayalım
print("\nTeknik Not: ${teknikNot ?? "Not girilmedi."}");
String guncelTarih = tarihFormatla(24, 05, 2024);
print("İşlem Tarihi: $guncelTarih\n");
// Soru 7: OOP Uygulaması
EtapTahta tahta = EtapTahta("Intel i3", 4, 120, 2);
tahta.sistemBilgisi();
}
B Grubu Sınav Notları:
Operatör Farkı: A grubunda sadece çıkarma varken, burada parantez içi işlem ve toplama-çıkarma kombinasyonu kullanıldı.
String Farkı:
trimyerinereplaceAllkullanılarak farklı bir String metodu test edildi.Döngü Farkı:
fordöngüsü ileri değil, geriye doğru çalıştırıldı.whiledöngüsü belirli bir artış oranıyla kullanıldı.OOP Farkı: Sınıf isimleri ve hiyerarşisi değiştirildi,
superanahtar kelimesinin kullanımı pekiştirildi.
Bu sınav, bir öğrencinin veya geliştiricinin temel Dart yeteneklerini ölçmek için idealdir. B
Yorumlar
Yorum Gönder