package příklady;

/*******************************************************************************
 * Třída Sbl_Třída slouží k ...
 *
 * @author    Rudolf Pecinovský
 * @version   0.00.000,  0.0.2003
 */
public class Experimenty
{
//== KONSTANTNÍ ATRIBUTY TŘÍDY =================================================
//== PROMĚNNÉ ATRIBUTY TŘÍDY ===================================================
//== KONSTANTNÍ ATRIBUTY INSTANCÍ ==============================================
//== PROMĚNNÉ ATRIBUTY INSTANCÍ ================================================
//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ TŘÍDY ========================================
//== OSTATNÍ METODY TŘÍDY ======================================================

    /***************************************************************************
     * Meotda demonstruje předání parametru, který je polem 
     * a možnost jeho zpracování.
     * Přestože výstupní parametr je oficielně typu Object,
     * programy v něm umějí poznat instanci typu String[].
     */
    public static Object objekty( String[] poleŘetězců )
    {
        Object[] poleObecnýchObjektů = poleŘetězců;
        
        return   poleObecnýchObjektů;
    }
    
    public static rup.česky.tvary.AHýbací pozná()
    {
        rup.česky.tvary.Elipsa e = new rup.česky.tvary.Kruh();
        e.posunVpravo();
        rup.česky.tvary.AHýbací ah = e;
        ah.posunDolů();
        return ah;
    }
    
    
    public static void demoObjekty()
    {
        String[] texty = { "raz", "dva", "tři" };

        System.out.println("Objekty - přímý tisk pole: " + texty );

        System.out.print("Objekty - tisk po prvcích: ");
        for( String string : texty )
            System.out.print( string + " - " );
        System.out.println();

        System.out.println("Objekty - tisk převodem na seznam: " +
            java.util.Arrays.asList( texty ) );

        Object objekty = objekty( texty );
        Object[] poleObjektů = (Object[]) objekty;
        String[] stringy = (String[])objekty;

        System.out.println("Objekty - tisk jako pole objektů: " +
            java.util.Arrays.asList( poleObjektů ) );
    }
    
    
    public static Object primitiva( int[] poleCelýchČísel )
    {
        double[] poleReálnýchČísel;

        //poleReálnýchČísel = poleCelýchČísel;

        int početPrvků = poleCelýchČísel.length;
        poleReálnýchČísel = new double[ početPrvků ];

        for( int i=0;   i < početPrvků;   i++ )
            poleReálnýchČísel[i] = poleCelýchČísel[i]; 

        return poleReálnýchČísel;
    }

    
    public static void demoPrimitiva()
    {
        Object primitiva = primitiva( new int[] { 1, 2, 3 } );

        System.out.print("Primitiva - tisk po prvcích: ");
        
        double[] reálná = (double[])primitiva;
        for( double reálné : reálná )
            System.out.print( reálné + " - " );
        System.out.println();

        System.out.println("Primitiva - tisk převodem na seznam: " +
            java.util.Arrays.asList( reálná ) );

        int[] celá = (int[])primitiva;
    }
    
    
    public static String[][] dovjrozměrné()
    {
        String[][] tabulka = new String[2][3];
        tabulka[0][4] = "nula - jedna";
        return tabulka;
    }
    
    

//##############################################################################
//== KONSTRUKTORY A TOVÁRNÍ METODY =============================================

    /***************************************************************************
     * Třída Experimenty je knihovní třídou a proto zatajuje svůj konstruktor.
     */
    private Experimenty() {}

    

//== PŘÍSTUPOVÉ METODY VLASTNOSTÍ INSTANCÍ =====================================
//== PŘEKRYTÉ METODY IMPLEMENTOVANÝCH ROZHRANÍ =================================
//== PŘEKRYTÉ ABSTRAKTNÍ METODY RODIČOVSKÉ TŘÍDY ===============================
//== PŘEKRYTÉ KONKRÉTNÍ METODY RODIČOVSKÉ TŘÍDY ================================
//== NOVĚ ZAVEDENÉ METODY INSTANCÍ =============================================
//== SOUKROMÉ A POMOCNÉ METODY TŘÍDY ===========================================
//== SOUKROMÉ A POMOCNÉ METODY INSTANCÍ ========================================
//== VNOŘENÉ A VNITŘNÍ TŘÍDY ===================================================
//== TESTY A METODA MAIN =======================================================
}

