Kinek ajánljuk?
Azon programozóknak, akiknek van már C/C++, Pascal/Delphi, C#, PhP programozási gyakorlatuk, de szeretnének továbblépni Android vagy GWT irányban.
A tervezett óraszám 2X8 óra, ami nem alkalmas a teljes Java programnyelv megismertetésére, de gyakorlott programozók számára a Java alapokat megismerteti.
Két szinten lehet bekapcsolódni, az alap szint azok számára ajánlott, akik az objektum-orientált programozással akarnak megismerkedni.
A második szinten becsatlakozóknak ez már nem okoz gondot, de a Java perifériás lehetőségei (erőforrások, XML, tervezési minták, lokalizáció, stb.) még fehér foltot jelentenek.
Hogy tudom eldönteni melyik szinten kell bekapcsolódnom?
A döntés megkönnyítéséhez mellékelünk két minta kódot. Ha bármely részlet homályos akkor az kijelöli a szükséges csatlakozási szintet.
Alap szintű felmérő kód
package com.argus.gwtp.client.presenter;
import com.argus.gwtp.client.CurrentUserChangedEvent;
import com.argus.gwtp.client.CurrentUserChangedEvent.CurrentUserChangedHandler;
import com.argus.gwtp.shared.CurrentUser;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.web.bindery.event.shared.EventBus;
import com.gwtplatform.mvp.client.PresenterWidget;
import com.gwtplatform.mvp.client.View;
import com.gwtplatform.mvp.client.annotations.ProxyEvent;
/**
* Abstract LoginPresenter class. There are different login methods:
* - none, for demo mode
* - by-pin, for touchscreen using, only pin code exists
* - by-user-name-password, normal usernam/password login
* @author zamek
*
* @param <V> a View which extends MyView.
*/
public abstract class AbstractLoginPresenter<V extends AbstractLoginPresenter.MyView> extends PresenterWidget<V>
implements CurrentUserChangedHandler {
public interface MyView extends View {
}
@Inject MainPagePresenter mainPagePresenter;
/**
* Constructor of AbstractLoginPresenter. There is no need default constructor, because this is Gin generated class.
* @param eventBus Eventbus for send/capture events.
* @param view any display for login frontend
*/
public AbstractLoginPresenter(final EventBus eventBus, final V view) {
super(eventBus, view);
eventBus.addHandler(CurrentUserChangedEvent.getType(), new CurrentUserChangedEvent.CurrentUserChangedHandler() {
@Override
public void onCurrentUserChanged(CurrentUserChangedEvent event) {
userChanged(event.currentUser);
}
});
}
/**
* Show/Hide view.
* @param enabled true=visible
*/
public void setVisible(boolean enabled) {
this.getView().asWidget().setVisible(enabled);
}
@ProxyEvent
@Override
/**
* Captures the CurrentUserChange event, to show/hide login/logout display content.
* @param event contains the new user data.
*/
public void onCurrentUserChanged(CurrentUserChangedEvent event) {
this.setVisible(!event.currentUser.isGuest());
}
public MainPagePresenter getMainPagePresenter() {
return this.mainPagePresenter;
}
/**
* Register an event handler of the Login button of View
* @param handler handling login event
*/
public abstract void addLoginClickHandler(ClickHandler handler);
/**
* Getting the userName from display, to send authenticating
* @return the name of user to authenticating
*/
public abstract String getUserName();
/**
* Getting the password from display, to send authenticating
* @return the password of user to authenticating
*/
public abstract String getPassword();
/**
* User changed method, for view
* @param user the changed user data
*/
protected abstract void userChanged(CurrentUser user);
}
Alapok
- Ismerkedés az Eclipse környezettel, egy-két ismétlő jellegű, de Java szintaktikájú program.
- Osztály, objektum, példányosítás.
- Öröklődés - osztályok öröklődése.
- Interface, absztrakt osztály.
- Generikus programozás
- Annotációk
- Kivételkezelés
Special szintű felmérő kód
<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent">
<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
xmlns:g="urn:import:com.google.gwt.user.client.ui" xmlns:sb="urn:import:com.argus.gwtp.client.util.slider">
<ui:with type="com.argus.gwtp.client.util.slider.SliderResource"
field="res" />
<ui:style>
</ui:style>
<g:HorizontalPanel>
<g:PushButton ui:field="btnLeft">
<g:upFace image="{res.left}" />
</g:PushButton>
<sb:HorizontalSliderBar minValue="4" maxValue="12"
ui:field="slider" currentValue="6" stepSize="0.5" numTicks="10"
numLabels="10" height="200px" />
<g:PushButton ui:field="btnRight">
<g:upFace image="{res.right}" />
</g:PushButton>
</g:HorizontalPanel>
</ui:UiBinder>
package com.argus.gwtp.client.util.slider;
import com.google.gwt.core.client.GWT;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.uibinder.client.UiBinder;
import com.google.gwt.uibinder.client.UiField;
import com.google.gwt.user.client.ui.PushButton;
import com.google.gwt.user.client.ui.Widget;
import com.google.gwt.widgetideas.client.SliderBar;
public class HorizontalSlider extends AbstractSlider {
private static HorizontalSliderUiBinder uiBinder = GWT
.create(HorizontalSliderUiBinder.class);
interface HorizontalSliderUiBinder extends
UiBinder<Widget, HorizontalSlider> {
}
@UiField PushButton btnLeft;
@UiField PushButton btnRight;
@UiField HorizontalSliderBar slider;
public HorizontalSlider() {
initWidget(uiBinder.createAndBindUi(this));
this.btnLeft.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
leftClicked();
}
});
this.btnRight.addClickHandler(new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
rightClicked();
}
});
}
@Override
protected SliderBar getSliderBar() {
return this.slider;
}
protected void leftClicked() {
this.slider.shiftLeft(1);
}
protected void rightClicked() {
this.slider.shiftRight(1);
}
}
Java speciál
- Szerializáció
(Objektumok mentése, betöltése, továbbítása) - Kompozíció
(Összetett adatstruktrák felépítése, kompozícióval és öröklődéssel) - Design patterns
(Creationals,behaviourals,structurals,MVC,MVP) - XML alapok
(Az xml leírók használata, hibakeresés) - Java resource fogalma és kezelése
(Lokalizáció, nem Java objektumok kezelése) - Java deployment
(Manifest, csomagkészítés, Ant, Maven) - Java testing, documentation
(Junit,JavaDoc)