\documentclass{article}

\usepackage[latin2]{inputenc}

\title{Vaje 15}
\author{Simona Perčič}
\date{16. in 17.02.1998}

\begin{document}

\maketitle

\section*{Shema ocenjevanja 1.~domače naloge}

SKUPAJ TOCK: 100

\begin{enumerate}
\item Module ART:(60)
  \begin{enumerate}
  \item pravilnost(30)
    \begin{itemize}
    \item podprogram ART\_Sub (15)
      \begin{itemize}
      \item rokovanje različnih predznakov (5)
      \item rokovanje z velikostjo polja in števila(5)
      \item samo odštevanje (5)
      \end{itemize}
    \item podprogram ART\_Add(15)
      \begin{itemize}
      \item rokovanje različnih predznakov (5)
      \item rokovanje z velikostjo polja in števila (5)
      \item samo seštevanje(5)
      \end{itemize}
    \end{itemize}
  \item kodiranje (20)
    \begin{itemize}
    \item uporaba podprogramov in konstant(10)
    \item komentarji, zaimki itd.(10)
    \end{itemize}
  \item programska dokumentacija(10)
    \begin{itemize}
    \item vsebina komentarja (10)
    \end{itemize}
  \end{enumerate}
\item Testni modul(40)
  \begin{enumerate}
  \item pravilnost(15)
    \begin{itemize}
    \item uporaba 'feof' v glavni zanki(2)
    \item uporaba 'scanf' za branje vrstice(2)
    \item uporaba 'switch' glede na prebrani ukaz(3)
    \item pravilno izpisovanje števila (3)
    \item pravilni klici podprogramov (2)
    \end{itemize}
  \item kodiranje (10)
    \begin{itemize}
    \item uporaba podprogramov in konstant  (5)
    \item komentarji, zaimki itd.(5)
    \end{itemize}
  \item programska dokumentacija (5)
    \begin{itemize}
    \item vsebina komentarjev (5)
    \end{itemize}
  \item ali se program prevede in izvede(10)
  \end{enumerate}
\end{enumerate}

Rešitve 1.domače naloge si lahko ogledate na področju:
%
\[
  \texttt{Z:}
    \backslash\texttt{PREDAVANJA}
    \backslash\texttt{POLDE}
    \backslash...
\]

\section*{Na primeru SKLAD si oglejmo kaj več o {\em polimorfizmu}}

Na danem primeru si lahko ogledate kako izgleda \emph{objektno
  programiranje} proti \emph{polimorfizmu}.

Definicijski modul najdemo na področju
%
\[
\texttt{Z:}
   \backslash\texttt{Predavanja}
   \backslash\texttt{Polde}
   \backslash\texttt{code}
   \backslash\texttt{Sklad}
   \backslash\texttt{Sklad.h}
\]

{\tt
\begin{verbatim}
#include "../../code/bool/bool.h"

#define max_Sklad 100

class Sklad {                 //Sklad-ime razreda

private:                      //zasebno
        int skladisce [max_sklad];
        int zadnji;

public:
  Sklad();                    //KONSTRUKTOR
        /*Desc: Ustvari prazen sklad.
          Parms: /
          Result: Sklad
          Pre: /
          Post: SKL_Prazen()
        */

  ~Sklad();                   //DESTRUKTOR
        /*Desc: Unici sklad.
          Parms: /
          Result: /
          Pre: Sklad je bil ustvarjen
          Post: Sklad ne moremo vec uporabiti.
        */

  void Nalozi( int element );
        /*Desc: Element nalozi na sklad..
          Parms: element-element, ki ga nalozimo na sklad
          Result: /
          Pre: not(SKL_Poln())
          Post: Sklad´= [element|Sklad]
        */

  int Zlozi();
        /*Desc: Zlozi element s sklada.
          Parms: /
          Result: element
          Pre: (not (SKL_Prazen()) && (Sklad = [element|ostalo])
          Post: Sklad´ = ostalo
        */

  bool Prazen();
        /*Desc: Preveri, ali je sklad prazen.
          Parms: /
          Result: { if Sklad = [] then TRUE else FALSE }
          Pre: Sklad  ustvarjen
          Post: /
        */

  bool Poln();
        /*Desc: Preveri, ali je sklad poln.
          Parms: /
          Result: b if Sklad.zadnji < max_Sklad then FALSE else TRUE }
          Pre: Sklad je bil ustvarjen.
          Post: /
        */

  int Vrh();
        /*Desc: Vrne vrhni element Sklada.
          Parms: /
          Result: vrh
          Pre: not(Prazen()) && [vrh|_]
          Post: /
        */

}  //Sklad
\end{verbatim}
}


\subsection*{Razred}

Deklaracijo razreda sestavljata dva dela. Prvi del je glava razreda,
ki jo sestavlja rezervna beseda \emph{class} in ime razreda. Drugi del
pa predstavlja telo razreda in je zaprt v zavitih oklepajih.V telesu
razreda se nahajajo objekti(spremenljivke) in metode (funkcije).


\subsection*{Skrivanje podatkov}

\begin{itemize}
\item Člani razreda, ki ki so deklarirani kot \emph{public}, so
  dostopni kjer koli iz programa. Tako naj bi bile definirane le
  metode, ki omogocajo uporabo objektov.
\item Člani razreda, ki so deklarirani kot \emph{private}, so
  dosegljivi le metodam
samega razreda.
\end{itemize}


\subsection*{Konstruktorji}

\begin{itemize}
\item Konstruktor je metoda razreda, \textbf{ki ima isto ime kot razred}.
\item Konstruktor je metoda razreda, \textbf{ki ničesar ne vrača}
  (pred njo ne sme stati niti \texttt{void})!
\item Razred ima \textbf{lahko več} konstruktorjev.
\item Konstruktor se izvede ob \textbf{deklaraciji} razredov.
\end{itemize}


\subsection*{Destruktorji}

\begin{itemize}
\item Destruktor je metoda razreda, \textbf{ki ima isto ime kot razred
    in dodan prvi znak ,,\~``.}
\item Destruktor je ime razreda, \textbf{ki nič ne vrača} (pred njo ne
  sme stati niti \texttt{void}!) in ničesar ne sprejme kot parameter.
\item Razred ima lahko \textbf{samo en destruktor}.
\item Destruktor se izvede, \textbf{ko se objekt uniči}.
\end{itemize}


Izvedbeni modul najdemo na področju:
%
\[
\texttt{Z:}
  \backslash\texttt{Predavanja}
  \backslash\texttt{Polde}
  \backslash\texttt{code}
  \backslash\texttt{Sklad}
  \backslash\texttt{Sklad.cpp}
\]

{\tt
\begin{verbatim}
#include "../../code/Sklad/Sklad.h"

Sklad:: Sklad()  {
  zadnji = 0;
} //Sklad

Sklad:: ~Sklad()  {}

void Sklad:: Nalozi (int element)  {
  skladisce[zadnji] = element;
  zadnji++;
}  //Nalozi

int Sklad:: Zlozi()  {
  zadnji--;
  return skladisce[zadnji];
}  //Zlozi

bool Sklad:: Prazen()  {
  return (zadnji == max_Sklad);
} //Poln

int Sklad:: Vrh()  {
  return skladisce[zadnji-1];
}  //Vrh
\end{verbatim}
}

Testni modul si lahko ogledati na področju
\[
\texttt{Z:}
  \backslash\texttt{Predavanja}
  \backslash\texttt{Polde}
  \backslash\texttt{test}
  \backslash\texttt{Sklad}
  \backslash\texttt{Testsk.cpp}
\]

{\tt
\begin{verbatim}
#include <stdio.h>
#include "../../code/Sklad/Sklad.h"


int main()  {
  int element;
  Sklad s;                // s.Sklad-s tem pozenemo funkcijo Skladin
                          // s postane Sklad
  printf("Napisi stevilko, 0 predstavlja konec \n");
  scanf("%d", &element);
  while (element !=0)  {
         s.Nalozi(element);
         scanf("%d", &element);
  }
  while (! S.Prazen())
         printf("%d \n", s.Zlozi());
}
\end{verbatim}
}

\end{document}
