Option Strict On

Public Class COven
    
  ' ========== Stałe =================
  Private Const DOOROPEN As Integer = 1    ' Drzwiczki piekarnika zamknięte
  Private Const DOORCLOSED As Integer = 0  ' Drzwiczki piekarnika otwarte
  Private Const OVENON As Integer = 1      ' Piekarnik włączony
  Private Const OVENOFF As Integer = 0     ' Piekarnik wyłączony
  Private Const LIGHTON As Integer = 1     ' Światło w piekarniku włączone
  Private Const LIGHTOFF As Integer = 0    ' Światło w piekarniku wyłączone
  Private Const BROILTEMP As Integer = 550 ' Temperatura rusztu
  Private Const CLEANTEMP As Integer = 600 ' Temperatura samooczyszczania 

  ' ========== Dane składowe klasy ==========
  Private mOvenStatus As Integer ' Czy piekarnik jest włączony, czy nie
  Private mTemperature As Integer  ' Temperatura pieca
  Private mDoorStatus As Integer   ' Czy drzwiczki są otwarte, czy zamknięte 
  Private mOvenLight As Integer    ' Czy światło jest włączone, czy wyłączone  


  ' ========== Konstruktor ================
  Public Sub New()
    ' Cel: nadać zmiennym ich właściwe wartości.
    ' Jeśli nawet niektóre są zerowe, ustawiamy je w wyraźny sposób.
    mOvenStatus = OVENOFF     ' Piekarnik wyłączony 
    mTemperature = 0          ' Piekarnik nie jest nagrzany
    mDoorStatus = DOORCLOSED  ' Drzwiczki piekarnika są zamknięte
    mOvenLight = LIGHTOFF     ' Światło w piekarniku jest wyłączone 

  End Sub

  ' ================ Właściwości ===========
  Public Property OvenStatus() As Integer
    ' Cel: uzyskać bieżący stan piekarnika.
    '      0 = piekarnik wyłączony, 1 = piekarnik włączony
    Get
      Return mOvenStatus
    End Get

    ' Cel: zmienić stan piekarnika. Zakładamy, że  
    '      Value jest żądaną temperaturą.
    '      Value = 0 oznacza, że piekarnik jest 
    '      wyłączony. Każda inna wartość wskazuje 
    '      pożądaną wartość temperatury
    Set(ByVal Value As Integer) ' Wyłączamy lub włączamy piekarnik
      Dim Flag As Integer

      If Value <> OVENOFF Then
        mOvenStatus = OVENON  ' Piekarnik jest teraz włączony
      Else
        mOvenStatus = OVENOFF ' Piekarnik jest teraz wyłączony
      End If
      Flag = Bake(Value)

    End Set
  End Property

  Public Property DoorStatus() As Integer
    ' Cel: ta właściwość podaje stan drzwi
    Get
      Return mDoorStatus
    End Get

    ' Cel: ta właściwość ustawia stan drzwi
    Set(ByVal Value As Integer)
      If Value = 0 Then
        mDoorStatus = DOORCLOSED
      Else
        mDoorStatus = DOOROPEN
      End If
    End Set
  End Property

  Public Property LightStatus() As Integer
    ' Cel: ta właściwość podaje stan światła
    Get
      Return mOvenLight
    End Get

    ' Cel: ta właściwość ustawia stan światła
    Set(ByVal Value As Integer)
      If Value = 0 Then
        mOvenLight = LIGHTOFF
      Else
        mOvenLight = LIGHTON
      End If

    End Set
  End Property

  Public Property Temperature() As Integer
    ' Cel: ta właściwość podaje temperaturę
    Get
      Return mTemperature
    End Get

    ' Cel: ta właściwość zmienia temperaturę
    Set(ByVal Value As Integer)
      Dim Flag As Integer

      If Value < 0 Then
        mTemperature = 0
      End If
      Flag = Bake(Value)   ' Ustaw temperaturę piekarnika
    End Set
  End Property

  ' ================ Metody ==============

  Public Function Bake(ByVal Temp As Integer) As Integer
    ' Cel: ta metoda jest używana do ustawiania temperatury piekarnika 
    '      do temperatury podanej w tej metodzie.
    '
    ' Lista argumentów:
    '  Temp   pożądana temperatura 
    '
    ' Zwracana wartość:
    '  integer  1 jeśli wszystko jest w porządku, 0 w przypadku błędu
    '
    If mOvenStatus = OVENOFF Then  ' Piekarnik jest teraz wyłączony 
      Return 0           ' Błąd
    End If

    mTemperature = Temp    ' Piekarnik jest włączony, ustaw temperaturę
    Return 1               ' Wszystko jest w porządku

  End Function

  Public Function Preheat(ByVal Temp As Integer) As Integer
    ' Cel: ta metoda jest używana do wstępnego podgrzania piekarnika
    '      do temperatury o podanej wartości.
    '
    ' Lista argumentów:
    '  temp   pożądana temperatura 
    '
    ' Zwracana wartość:
    '  integer  1, jeśli wszystko jest w porządku, 0 w przypadku błędu 
    '
    Return Bake(Temp)

  End Function

  Public Sub Broil()
    ' Cel: ta metoda służy do włączania rusztu 
    '      w piekarniku.
    '
    ' Argumenty:
    ' Niedostępne
    '
    ' Zwracana wartość:
    ' Niedostępna 
    '
    mTemperature = BROILTEMP

  End Sub

  Public Sub SelfClean()
    ' Cel: ta metoda jest stosowana do samooczyszczania piekarnika. 
    '
    ' Argumenty:
    ' Niedostępne
    '
    ' Zwracana wartość:
    ' Niedostępna
    '
    mTemperature = CLEANTEMP

  End Sub

End Class
