0Pricing
Scala for Backend Engineering & Functional Programming · Lekcja

Klasy, obiekty i pakiety

Dowiedz się, jak definiować klasy, tworzyć obiekty i organizować kod za pomocą pakietów w Scali.

Klasy, obiekty i pakiety to bezpłatna lekcja Scala for Backend Engineering & Functional Programming na CoddyKit. To lekcja 1 z 2. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Scala for Backend Engineering & Functional Programming, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Scala for Backend Engineering & Functional Programming zawiera 2 lekcji w sumie.

Witamy w programowaniu obiektowym w Scali

W tej lekcji poznasz istotę programowania obiektowego (OOP) w Scali. Dowiesz się, jak organizować kod za pomocą klas, tworzyć instancje tych klas (obiekty) i porządkować wszystko za pomocą pakietów.

Zacznijmy tworzyć solidne i modularne aplikacje!

Klasy: schematy

Proszę myśleć o klasie jak o szablonie do tworzenia obiektów. Definiuje ona właściwości (dane) i zachowania (metody), które będą mieć jej obiekty. Klasy nie przechowują danych samodzielnie, lecz opisują, jakie dane może przechowywać obiekt.

Oto podstawowa definicja klasy:

class Car {
  // Properties and methods go here
}

Definiowanie prostej klasy

W języku Scala klasę definiuje się za pomocą słowa kluczowego class, po którym podaje się jej nazwę. Utwórzmy prostą klasę Dog. Na razie niewiele robi, ale to dobry początek!

Spróbuj uruchomić tę pustą definicję klasy:

class Dog {
  // This dog has no properties or behaviors yet
}

object Main {
  def main(args: Array[String]): Unit = {
    println("Dog class defined!")
  }
}

Tworzenie obiektów (instancji)

Obiekt jest instancją klasy. To rzeczywista „rzecz” utworzona na podstawie szablonu. Aby utworzyć obiekt, należy użyć słowa kluczowego new, a następnie podać nazwę klasy.

Każdy obiekt otrzymuje własny zestaw danych zgodnie z definicją klasy.

class Dog {
  // Still an empty dog blueprint
}

object Main {
  def main(args: Array[String]): Unit = {
    val myDog = new Dog()
    val yourDog = new Dog()
    println("Two dog objects created!")
  }
}

Dodawanie właściwości do klasy

Klasy mogą mieć właściwości (nazywane także polami lub składowymi), które przechowują dane. Można je zdefiniować w konstruktorze klasy, dzięki czemu stają się parametrami podczas tworzenia obiektu.

Dodajmy naszemu obiektowi Dog właściwości name i breed:

class Dog(val name: String, val breed: String) {
  // 'val' makes name and breed immutable properties
}

object Main {
  def main(args: Array[String]): Unit = {
    val myDog = new Dog("Buddy", "Golden Retriever")
    println(s"My dog's name is ${myDog.name} and breed is ${myDog.breed}.")
  }
}

Dodawanie zachowania (metod)

Klasy definiują także metody, czyli funkcje opisujące zachowanie obiektu. Metody mogą uzyskiwać dostęp do właściwości obiektu i je modyfikować.

Nasz Dog potrafi teraz bark():

class Dog(val name: String, val breed: String) {
  def bark(): String = {
    s"${name} says Woof!"
  }
}

object Main {
  def main(args: Array[String]): Unit = {
    val myDog = new Dog("Max", "Labrador")
    println(myDog.bark())
  }
}

Scala `object` (singletony)

W języku Scala słowo kluczowe object definiuje singleton. Oznacza to, że może istnieć tylko jedna jego instancja. Do jego utworzenia nie używa się new; wystarczy odwołać się do jego nazwy.

Singletony są często używane do definiowania metod narzędziowych lub pojedynczego punktu wejścia.

object MathUtils {
  def add(a: Int, b: Int): Int = a + b
  def subtract(a: Int, b: Int): Int = a - b
}

object Main {
  def main(args: Array[String]): Unit = {
    val sum = MathUtils.add(5, 3)
    println(s"5 + 3 = ${sum}")
  }
}

Obiekty towarzyszące

Obiekt towarzyszący to object, który ma taką samą nazwę jak class i jest zdefiniowany w tym samym pliku źródłowym. Obiekt i klasa mają specjalny dostęp do swoich wzajemnie prywatnych składowych.

  • Klasa przechowuje dane i metody właściwe dla instancji.
  • Obiekt towarzyszący przechowuje metody przypominające statyczne lub metody fabrykujące.
class Circle(val radius: Double) {
  def area: Double = Circle.PI * radius * radius
}

object Circle {
  // This is the companion object for the Circle class
  val PI: Double = 3.14159
  def apply(r: Double): Circle = new Circle(r) // Factory method
}

object Main {
  def main(args: Array[String]): Unit = {
    val c = Circle(5.0) // Using the apply method from companion object
    println(s"Circle area: ${c.area}")
  }
}

Porządkowanie kodu za pomocą pakietów

Pakiety umożliwiają organizowanie klas i obiektów w logiczne grupy, zapobiegają konfliktom nazw i ułatwiają utrzymanie kodu.

Można myśleć o nich jak o folderach na kod. Słowo kluczowe package deklaruje pakiet na początku pliku Scali.

package com.coddykit.animals

class Cat(val name: String) {
  def meow(): String = s"${name} says Meow!"
}

// This class is now inside com.coddykit.animals package

Importowanie składowych z pakietów

Aby używać klas lub obiektów zdefiniowanych w innym pakiecie, należy je zaimportować. Słowo kluczowe import udostępnia składowe pakietu w bieżącym zakresie.

Zaimportujmy naszą klasę Cat:

package com.coddykit.app

// Define a class in a package first for import example
package com.coddykit.animals {
  class Cat(val name: String) {
    def meow(): String = s"${name} says Meow!"
  }
}

import com.coddykit.animals.Cat

object Main {
  def main(args: Array[String]): Unit = {
    val myCat = new Cat("Whiskers")
    println(myCat.meow())
  }
}

Szybki sprawdzian: klasa czy obiekt?

Omówiliśmy klasy, obiekty i pakiety. Sprawdźmy, czy wszystko jest jasne!

Podsumowanie: klasy, obiekty i pakiety

Świetna praca! Poznali Państwo podstawy programowania obiektowego w Scali:

  • Klasy są szablonami definiującymi właściwości i zachowania.
  • Obiekty są instancjami tworzonymi na podstawie klas za pomocą new.
  • Słowo kluczowe object w Scali tworzy singletony przydatne do definiowania narzędzi lub metod fabrykujących.
  • Obiekty towarzyszące współpracują z klasami, udostępniając składowe przypominające statyczne.
  • Pakiety porządkują kod, zapobiegają konfliktom nazw i poprawiają jego strukturę.

W następnym kroku rozwiniemy te podstawy, omawiając dziedziczenie i polimorfizm!

Często zadawane pytania

Czy lekcja „Klasy, obiekty i pakiety” jest bezpłatna?

Tak — pełny tekst „Klasy, obiekty i pakiety” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Scala for Backend Engineering & Functional Programming, przejdź na CoddyKit PRO. Kurs Scala for Backend Engineering & Functional Programming zawiera 2 lekcji w sumie.

Co nauczysz się w „Klasy, obiekty i pakiety”?

Dowiedz się, jak definiować klasy, tworzyć obiekty i organizować kod za pomocą pakietów w Scali. Ćwiczysz Scala for Backend Engineering & Functional Programming z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć Scala for Backend Engineering & Functional Programming?

Nie wymagamy żadnego doświadczenia. Scala for Backend Engineering & Functional Programming w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 2.

Ile czasu zajmuje lekcja „Klasy, obiekty i pakiety”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji Scala for Backend Engineering & Functional Programming?

Tak. Każda lekcja Scala for Backend Engineering & Functional Programming zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Klasy, obiekty i pakiety
  2. Dziedziczenie i polimorfizm
← Powrót do Scala for Backend Engineering & Functional Programming