public abstract class AbstractFrame {
	
  /** Okno samo o sobě */
  protected final JFrame frame;

  /** Mapa View - views */
  protected final Map<Class<? extends AbstractView<? extends JComponent>>, AbstractView<? extends JComponent>> views = new HashMap<Class<? extends AbstractView<? extends JComponent>>, AbstractView<? extends JComponent>>();
    
  /** Mapa Controllerů - controllers */
  protected final Map<Class<? extends AbstractController>, AbstractController> controllers = new HashMap<Class<? extends AbstractController>, AbstractController>();

  /**
   * Konstruktor
   *
   */
  public AbstractFrame() {
    regControllers();
    regViews();

    // ... + vykreslení komponent
  }

  protected abstract void regViews();

  protected abstract void regControllers();

  /**
   * Získání konkrétního Pohledu z mapy všech zaregistrovaných na základě názvu třídy.
   * 
   * @param viewClass
   * @return Instance požadovaného Pohledu
   */
  @SuppressWarnings("unchecked")
  public <View extends AbstractView<? extends JComponent>> View getView(Class<View> viewClass) {
    return (View) views.get(viewClass);
  }
    
  /**
   * Získání konkrétního Controlleru z mapy všech zaregistrovaných na základě názvu třídy.
   * 
   * @param controllerClass
   * @return Instance požadovaného Controlleru
   */
  @SuppressWarnings("unchecked")
  public <Controller extends AbstractController> Controller getController(Class<Controller> controllerClass) {
    return (Controller) controllers.get(controllerClass);
  }

}
