Next step

Projekt I Brak Komentarzy »

Prosty serwer ftp będzie tematem tego projektu. Na jego zrealizowanie zostawiłem 3 dni. Jest to niestety efekt innych, nie mniej ważnych zajęć, którym poświęcałem w ostatnim czasie intensywnie uwagę. Oczywiście trochę go spędziłem na dokształcanie w javie(poznawanie jej mechanizmów na własną rękę to zajęcie bardzo czasochłonne), czego jednak nie mogłem, ze względu na dodatkowe obowiązki, przełożyć na dodatkowe wpisy w tym blogu.

Przejdźmy do rzeczy. Projekt będzie polegał na zaimplementowaniu okna dialogowego klienta i serwera oraz umożliwienie klientowi łączenia się z serwerem, pobierania i wysyłania do niego plików. Ważnym elementem będzie możliwość obsłużenia przez nasz serwer ftp wielu klientów. Przejdziemy zatem przez kilka istotnych mechanizmów javy, bez których realizacja ta nie doszła by do skutku.

Ze względu na bardzo krótki termin wpisy będą teraz stosunkowo krótkie i nie będą poruszać zagadnienia w sposób kompleksowy. Zrobię to naturalnie w najbliższym terminie po oddaniu gotowej aplikacji, gdy już czas nie będzie mnie tak naglił.
Zatem chwila przerwy i zabieram się do pracy…

Projekt czas zacząć.

Projekt I Brak Komentarzy »

Wakacje już tuż tuż, a przedemną projekt semestralny. W związku z tym wpadłem na pomysł, żeby jakoś tu upamiętnić i wzbogacić doświadczenia każdego programisty, który tu przypadko trafi. Zawsze przecież można porównać sposób pracy, coś w nim zmienić, coś poprawić. Myślę, że mimowszystko jest to najlepszy sposób aby zobaczyć jak tworzy się projekty na poziomie średnim w tym języku(Tak oceniam siebie).
Do końca nie wiem jak się za niego zabrać i co dokłanie napisać. Wszystyko jak widać jest w pierwszej fazie projektowania. Pomoce z jakich zamierzam korzystać to przedewszystkim popularna książka Bruca Eckela oraz rozgległe fora. Niewykluczone są wykłady jak i pomoc wykładowcy.

Język Java#1

Podstawy Brak Komentarzy »

Minęło już trochę czasu od publikacji strony i jak do tej pory nic się nie ukazało. Było to spowodowane pochłaniającym mnie innym zajęciem, które równierz zmuszało mnie poniekąd do pracy przed komputerem, a zarazem, uniemożliwiało rozwijanie tej witryny. Jednak w tej chwili praca z tym językiem będzie moim osobistym priorytetem(przynajmniej przez około 2 miesiące), a zatem blog ten będzie aktualizowany w miarę często(szczerze postaram się).

Przechodząc jednak do rzeczy, dzisiaj zajmę się pierwszą częścią podstaw tego języka, która będzie niezbędna przy realizacji większego projektu, który już czeka w kolejce. Informacja na temat jak i czym kompilować pliki java, a także jakiego środowiska używać znajdziecie w zakładkach w górnej części strony.

Zaczynamy:

Pakiety: Pakiet w Java to zbiór plików zawierających klasy, umieszczone w katalogu o nazwie takiej jak nazwa pakietu. Aby zaznaczyć, że plik należy do pakietu, należy jako pierwszy element, pomijając komentarze, zadeklarować słowem package przynależność do pakietu. Oczywiście po tym słowie następuje nazwa pakietu, np.

package mojpakiet;
public class PierwszaKlasa{
//ciało klasy
}

W ten sposób dołączamy plik do pakietu “mojpakiet”. Konwencja nazywania pakietów polega na używaniu tylko małych liter! Warto równierz pamiętać, że pliki pakietu umieszczamy w katalogu o takiej samej nazwie jak nazwa pakietu!

Jak korzystać z pakietów? Aby skorzystać z “PierwszejKlasy” należy użyć słowa import. A oto meteody używania pakietów:

import mojpakiet.*; // włączamy cały pakiet(wszystkie klasy i interfejsy)
/* import mojpakiet.PierwszaKlasa; //importujemy tylko potrzebną klasę
PierwszaKlasa pk = new PierwszaKlasa();
//utworzenie referencji i rezerwacja pamięci klasy z pakietu “mojpakiet”

Możemy równierz zrobić to w ten sposób:

mojpakiet.PierwszaKlasa pk = new mojpakiet.PierwszaKlasa();

Jest to sposób z pewnością mniej praktyczny, aczkolwiek skuteczny.

Ok. Tyle o pakietach. Teraz trochę o tym jak pobierać dane z wejścia w Javie. Może przeanalizujmy trochę kodu:
import java.io.*;
public class Czytacz{
public static int dajInt(){
int wynik;
String str;
BufferedReader we = new BufferedReader(InputStreamReader(System.in));
try{
str = we.readLine();
}catch(java.io.IOException e){
str = “0″;
}
try{
wynik = Integer.valueOf(str).intValue();
}catch(Exception e){
wynik = 0;
}
return wynik;
}
}

Oczywiście na początku importujemy pakiet dostarczony przez producenta kompilatora, firmę sun microsystems. Jak uzyskać dostęp do pełnej dokumentacji pakietów dostarczonych wraz z kompilatorem, można przeczytać w dziale API. Nam pakiet java.io.* posłuży do wczytaywania danych z klawiatury.
Na początku definujemy publiczną klasę Czytacz, która posłuży jako zbiornik dla metod służących do odczytu.
W tym miejscu warto zarócić uwagę na fakt, że odczytywanie danych w Java jest specyficzny i odbiega od tego jaki był np. w C czy C++. W przypadku Java musimy deklarować funkcje, która będzie odczytywała dane o określonym typie.
Na początku metody dajInt() tworzymy zmienne prostego typu. Pierwsza zmienna to “wynik” do przechowywania odczytanej liczby całkowitej. Zmienna “str” posłuży jako tymczasowy “nośnik” dla odczytywanej zmiennej. To właśnie String będzie przekształcony w int, i jako int wyświetlony.

Kolejną rzeczą, którą należy wykonać, będzie utworzenie referencij typu BufferedReader wraz z rezerwacją pamięci dla obiektu tego typu.

Jeśli chodzi o język Java należy pamiętać, że posługujemy się referencjami do obiektu, a nie samym obiektem. W przypadku, gdy ostatnia referencja do obiektu przestaje istnieć, sam obiekt trafia do “odśmiecacza”. “Odśmiecacz” jest mechanizmem, który zwalnia pamięć z obiektów bez referencji(z takich, do których nie można się w żaden sposób odwołać, a za tem dla programistów i tak one nie istnieją). To co powoduje, że mechanizm z jednej strony jest wygodny, a z drugiej trochę mało efektywny, jest fakt, że nie działa on natychmiast po tym jak ostatnia referencja do obiektu przestanie istnieć. Może inaczej - nie ma gwarancji, że w tym samym momencie przestanie istnieć obiekt. Dodatkowo mechanizm ten, jako, że funkcjonuje on bez przerwy(w trakcie działania programu głównie), zajmuje on pewne zasoby. Zatem aplikacje czasu rzeczywistego napisane w tym języku będą nieefektywne. Chociaż w aktualnej wersji maszyny wirtualnej oraz kompilatora Javy, mechanizm ten działa wydajnie, to należy stwierdzić, że język ten jest dedykowany do rozwiązań, których szybka praca “teraz” nie jest priorytetem.

W przykładzie tym mamy utworzony jeden obiekt bez referencji. Będzie on potrzebny konstruktorowi obiektu BufferedReader, który jako parametr przyjmuje źródło z którego będzie czytać. W naszym przypadku będzie to strumień wejściowy InputStreamReader. W tym przypadku równierz tworzymy obiekt, którego konstruktor pobiera źródło danych.

Referencja biektu InputStreamReader nie istnieje. Obiektu tego potrzebujemy tylko w chwili tworzenia obiektu BufferedReader, aby podać źródło pobierania danych. Zatem niemal natychmiast trafia do kolejki odśmiecacza.

Teraz potrzebujemy dwa bloki try-catch. Bloki te służą do wykonywania instrukcji obarczonych ryzykiem. Wywołują klasę wyjątku (przeskakują do instrukcji catch), w momencie gdy instrukcja się nie powiedzie.

W pierwszym bloku jest to próba odczytania danych ze strumienia, a następnie przypisanie ich do zmiennej “str”. Jeżeli dana operacja nie powiedzie się, sterowanie trafia do bloku catch, wywołują klasę wyjątku IOException, a następnie do zmiennej “str” przypisuje łańuch tekstowy - “0″;

Drugi a zarazem ostatni blok naszego mini programu służy do przekształcenia naszej zmiennej “str” w zmienną typu Integer, a następnie przypisanie rezultatu do zmiennej “wynik”. Jeżeli na tym etapie kompilator zauważy jakąś nieprawidłowość zgłosi wyjątek, którego prócz wywołania wyjątku ogólnego, przypisze zmiennej “wynik” zero. Co ważne instrukcje te zostną wywoła tylko i wyłącznie gdy instrukcje z pierwszego bloku try-catch nie zgłoszą wyjątku. Zgłoszenie wyjątku w tym przypadku, kończy działanie tej metody.

OK. Na sam koniec, pokażę jak stworzyć metodę główną, dzięki której możliwe jest przetestowanie wszystkich naszych dzisiejszych zmagań z tym językiem. Kod ten zamieszczamy jako nową metodę naszej klasy. Metodę tą tworzymy tylko raz w naszych programach, nie mogą istnieć jednocześnie dwie metody main. Umieszczamy ją z reguły w klasie, która jest naszą główną klasą naszego programu.

public static void main(String args[]){
//tworzymy zmienną int, która będzie nam potrzebna do wyświetlania wyniku
int a;
//pobiera zmienną przez zdefiniowaną przez nas metodę, wynik przepisuje do zmiennej a
a = Czytacz.dajInt();
//wyświetla wynik
System.out.println(a);
}

O funkcji głównej napiszę tylko tyle, że jako argument metoda ta pobiera tablicę Stringów args, ta z kolei przechowuje wyrazy podane przy uruchamianiu programu z linii komend. Metoda ta stanowi serce naszego programu i jest niezbędna do jego uruchomienia. Funkcja wyświetlająca(Systam.out.println()) natomiast nie jest wymyślona tak sobie. Można jej używać bez importowania żadnego api dlatego, iż jest podstawową metodą systemową.

Dla osób które zrozumiały ten temat, proponuję wykonać dwie dodatkowe metody dla typu double oraz String, a następnie uruchomić je w metodzie main(). Na dzisiaj tyle…

Witam na javasup.keep.pl

News Brak Komentarzy »

    Witam na mojej stronie poświęconej programowaniu w języku Java. Nie zamierzam tej strony prowadzić biernie, przepisując przykłady już stworzone, lub też te które wnoszą tylko podstawy programowania. Postaram się skupić na tym co może przynieść korzyści zarówno mi jak i osobie, która programuje narazie tylko w swoim małym zakresie. Już na dniach postaram się wrzucić coś co zacznie rozjaśniać istotę programowania w tym języku oraz przynajmniej jeden artykuł do czego ten język może się przydać. Gorąco zachęcam do odwiedzania tego blogu przynajmniej raz w tygodniu. Napewno będzie warto.