3.1 Бэлтгэл шаардлага (Requirements)
Энэ лабораторид та Java хэл дээр анхны програмаа бичиж, Software Construction-ий суурь зарчмуудыг практикт хэрэгжүүлнэ.
Шаардлагатай зүйлс:
- Java JDK 17+ суулгасан байх (https://adoptium.net)
- Eclipse IDE for Enterprise Java and Web Developers суулгасан байх (https://www.eclipse.org/downloads/packages/)
- Компьютер дээр интернэт холболт
3.2 Алхам 1: Java болон IDE суулгах
Java JDK суулгах:
- https://adoptium.net хуудас руу орно
- "Latest LTS Release" товч дарна
- Өөрийн үйлдлийн системд тохирох хувилбарыг (Windows/Mac/Linux) татна
- Суулгагчийг ажиллуулж, зааврын дагуу суулгана
- Терминал/Command Prompt нээж шалгана:
java --version # Java хувилбар харагдах ёстой
javac --version # Java компайлер хувилбар харагдах ёстой
Eclipse IDE суулгах:
- https://www.eclipse.org/downloads/packages/ хуудас руу орно
- "Eclipse IDE for Enterprise Java and Web Developers" хувилбарыг татна
- Суулгагчийг ажиллуулж, workspace фолдер сонгоно
3.3 Алхам 2: Анхны Java төсөл үүсгэх
- Eclipse IDE-г нээнэ
- File → New → Java Project сонгоно
- Дараах тохиргоог хийнэ:
- Project name:
SoftwareConstructionLab01 - JRE: JavaSE-17 (суулгасан хувилбар)
- Project layout: Create separate folders for sources and class files
- Project name:
- "Finish" дарна
3.4 Алхам 3: "Hello World" — Анхны програм
src фолдер дотор Main.java файл үүсгэж дараах кодыг бичнэ:
public class Main { // Main нэртэй класс зарлаж байна (програмын эхлэх цэг)
public static void main(String[] args) { // main функц — Java програм эндээс эхэлдэг
System.out.println("Сайн байна уу! Энэ бол миний анхны Java програм!"); // Дэлгэцэнд текст хэвлэх
}
}
Ажиллуулах: Main.java файл дээр баруун товч → Run As → Java Application эсвэл Ctrl + F11
3.5 Алхам 4: Нарийн төвөгтэй байдлыг багасгах зарчмыг практикт хэрэгжүүлэх
Муу кодыг сайн код болгон өөрчлөх жишээ:
// ===== МУУ КОД (Нарийн төвөгтэй, ойлгоход хэцүү) =====
public class BadExample {
public static void main(String[] args) {
int a = 85; // a юу гэсэн үг вэ? Тодорхойгүй!
if (a >= 90) { // 90 юу гэсэн үг вэ? Тодорхойгүй!
System.out.println("A");
} else if (a >= 80) {
System.out.println("B");
} else if (a >= 70) {
System.out.println("C");
} else if (a >= 60) {
System.out.println("D");
} else {
System.out.println("F");
}
}
}
// ===== САЙН КОД (Энгийн, ойлгомжтой, стандартын дагуу) =====
public class GoodExample {
// Тогтмол утгуудыг нэрлэсэн тогтмолд (named constant) хадгалах
private static final int GRADE_A_THRESHOLD = 90; // "A" үнэлгээний доод хязгаар
private static final int GRADE_B_THRESHOLD = 80; // "B" үнэлгээний доод хязгаар
private static final int GRADE_C_THRESHOLD = 70; // "C" үнэлгээний доод хязгаар
private static final int GRADE_D_THRESHOLD = 60; // "D" үнэлгээний доод хязгаар
public static void main(String[] args) {
int studentScore = 85; // Оюутны оноо — нэр нь утгатай
String grade = calculateGrade(studentScore); // Тусдаа функцэд үнэлгээ тооцуулах
System.out.println("Үнэлгээ: " + grade); // Үр дүнг хэвлэх
}
/**
* Оюутны оноогоор үнэлгээ тооцоолох функц.
* @param score оюутны оноо (0-100)
* @return үнэлгээ (A, B, C, D, F)
*/
public static String calculateGrade(int score) { // Тусдаа функц — нэг үүрэгтэй
if (score >= GRADE_A_THRESHOLD) return "A"; // Тогтмол ашигласан — утга тодорхой
if (score >= GRADE_B_THRESHOLD) return "B";
if (score >= GRADE_C_THRESHOLD) return "C";
if (score >= GRADE_D_THRESHOLD) return "D";
return "F";
}
}
Юу сайжирсан бэ?
- Хувьсагчийн нэр утгатай болсон (
a→studentScore) - Шидэт тоонууд (magic numbers) тогтмол болсон (
90→GRADE_A_THRESHOLD) - Логик тусдаа функцэд гарсан → Дахин ашиглаж болно, тестлэхэд хялбар
3.6 Алхам 5: Exception Handling практик
import java.util.Scanner; // Хэрэглэгчээс оролт авах сан
public class ExceptionDemo {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in); // Оролт авах объект үүсгэх
System.out.print("Эхний тоо оруулна уу: ");
try { // Алдаа гарч болох хэсгийг try-д оруулна
int num1 = Integer.parseInt(scanner.nextLine()); // Текстийг тоо руу хөрвүүлэх
System.out.print("Хоёр дахь тоо оруулна уу: ");
int num2 = Integer.parseInt(scanner.nextLine());
int result = divide(num1, num2); // Хуваах функцийг дуудах
System.out.println("Үр дүн: " + result);
} catch (NumberFormatException e) { // Тоо биш зүйл оруулсан бол
System.out.println("Алдаа: Зөвхөн бүхэл тоо оруулна уу!");
} catch (ArithmeticException e) { // Тэгд хуваасан бол
System.out.println("Алдаа: Тэгд хуваах боломжгүй!");
} finally {
scanner.close(); // Нөөцийг чөлөөлөх (үргэлж хийгдэнэ)
}
}
/**
* Хоёр тоог хуваах функц — Defensive Programming жишээ
* @param a хуваагдагч
* @param b хуваагч (0 байж болохгүй)
* @return хуваалтын үр дүн
*/
public static int divide(int a, int b) {
if (b == 0) { // Урьдчилсан нөхцөл шалгах (precondition)
throw new ArithmeticException("Хуваагч тэг байж болохгүй");
}
return a / b;
}
}
3.7 Алхам 6: Энгийн нэгж тест бичих (JUnit ашиглахгүйгээр)
public class SimpleTest {
public static void main(String[] args) {
// Тест 1: A үнэлгээ шалгах
testGrade(95, "A", "Тест 1"); // 95 оноо → "A" байх ёстой
// Тест 2: B үнэлгээ шалгах
testGrade(85, "B", "Тест 2"); // 85 оноо → "B" байх ёстой
// Тест 3: F үнэлгээ шалгах
testGrade(50, "F", "Тест 3"); // 50 оноо → "F" байх ёстой
// Тест 4: Хилийн утга шалгах (boundary)
testGrade(90, "A", "Тест 4"); // Яг 90 → "A" байх ёстой
testGrade(89, "B", "Тест 5"); // 89 → "B" байх ёстой
System.out.println("Бүх тест дууслаа!");
}
/**
* Тест хийх туслах функц
* @param score шалгах оноо
* @param expected хүлээгдэж буй үр дүн
* @param testName тестийн нэр
*/
public static void testGrade(int score, String expected, String testName) {
String actual = GoodExample.calculateGrade(score); // Бодит үр дүнг авах
if (actual.equals(expected)) { // Хүлээгдэж буй ба бодит ижил үү?
System.out.println("✅ " + testName + " ДАВЛАА");
} else {
System.out.println("❌ " + testName + " БҮТЭЛГҮЙ — Хүлээсэн: "
+ expected + ", Гарсан: " + actual);
}
}
}