SDJ 12.2010 PL.pdf
(
12546 KB
)
Pobierz
382003495 UNPDF
12/2010 (192)
SPIS TREŚCI
BIBLIOTEKA MIESIĄCA
PROGRAMOWANIE JAVA
4 STL w praktyce:b usuwanie elementów –
Efektywne usuwanie elementów przy pomocy
biblioteki STL.
Rafał Kocisz
Programisto C++! Czy jesteś pewien, że wykorzystujesz
w praktyce potencjał swojej wspaniałej biblioteki standar-
dowej? Jeśli chcesz się przekonać, czy Twoja wiedza na
temat usuwania elementów z STL-owych kontenerów jest
pełna, to koniecznie przeczytaj ten artykuł!
28 Java – Problemy wydajnościowe.
Narzędzia, strategie oraz sposoby
rozwiązywania problemów wydajnościowych
z maszyną wirtualną Java
Marcin Kalas
Nawet najlepiej napisana aplikacja zrobi na użytkowni-
ku niekorzystne wrażenie, jeżeli pojawią się w niej proble-
my wydajnościowe. Długie okresy, w których program nie
odpowiada, lub też konieczność restartu aplikacji po kil-
ku godzinach pracy mogą zniechęcić użytkownika. Arty-
kuł przedstawia narzędzia oraz strategie, które możemy
wykorzystać w sytuacjach, gdy w naszej aplikacji pojawi
się właśnie taki problem.
KLUB TECHNICZNY
8 Technologie Progress OpenEdge – Część 11.
Auditing – Śledzenie systemu aplikacji
Piotr Tucholski
OpenEdge obsługuje wszystkie podstawowe usługi słu-
żące zabezpieczaniu procesów biznesowych. Zabezpie-
czenia te dotyczą kilku funkcji takich jak: uwierzytelnia-
nie, autoryzacja, poufność, integralność, zarządzanie toż-
samością i auditing. Auditing jest zintegrowanym i w pełni
konfigurowalnym serwisem, pozwalającym kontrolować
bazy danych OpenEdge, narzędzia bazodanowe oraz
aplikacje ABL i SQL.
CLOUD COMPUTING
44 Zrób to w chmurze – Porównanie
możliwości tworzenia aplikacji dla platformy
Amazon EC2 i Google App Engine
Konrad Kaplita, Dominik Radziszowski, Maciej Rząsa,
Łukasz Suder, Marcin Wardyński, Arkadiusz Wójcik
Katedra Informatyki AGH pokaże Ci, w jaki sposób pa-
trzeć na chmury z rozjaśnioną twarzą
14 Flex + Facebook = Lubię to!
Olga Grabek
Niedawno Adobe udostępniło deweloperom nowy zestaw
narzędzi ActionScript, które zapewniają integrację Platfor-
my Flash z jednym z najbardziej popularnych serwisów
społecznościowych na świecie - Facebook-iem. Dzięki
nim napisanie aplikacji Flex, komunikującej się z Facebo-
ok-iem, stało się bardzo proste.
50 Starcie gigantów – Automatyczna
skalowalność aplikacji na platformach
Amazon WS i Google App Engine
Konrad Kaplita, Dominik Radziszowski, Maciej Rząsa,
Łukasz Suder, Marcin Wardyński, Arkadiusz Wójcik
Katedra Informatyki AGH nauczy Cię, jak osiągnąć wy-
soką wydajność aplikacji wdrażanych w chmurze.
PROGRAMOWANIE C++
ZARZĄDZANIE PROJEKTEM
INFORMATYCZNYM
24 Asynchroniczna obsługa urządzeń wejścia
– wyjścia. Biblioteka boost::asio
Robert Nowak
Urządzenia wejścia – wyjścia działają znacznie wolniej
niż procesor, dlatego w czasie oczekiwania na odpowiedź
urządzenia warto go zwalniać. Współczesne systemy
operacyjne dostarczają udogodnień, które pozwalają to
osiągnąć bez angażowania niezależnych wątków.
58 Szacowanie nakładów na wytwarzanie
oprogramowania – Metoda punktów
przypadków użycia (Use Case Points)
Mateusz Kurleto
Artykuł prezentuje metodę szacowania nakładów na
wytwarzanie oprogramowania metodą punktów przy-
padków użycia. Na prostym przykładzie ilustruje kolej-
2
12/2010
2
SPIS TREŚCI
SPIS TREŚCI
ne kroki pozwalające rzetelnie wycenić koszty wytwo-
rzenia kodu.
nal. Developerzy przez kolejne dwa miesiące mogą re-
alizować swoje pomysły i stworzyć aplikacje, które we-
zmą udział w konkursie i co najważniejsze spodobają się
użytkownikom GG.pl i jury. Możliwości tworzenia aplika-
cji jest wiele, ograniczać je może jedynie bezpieczeń-
stwo użytkowników.
Z ŻYCIA ITOLOGA
62 Formalne Inspekcje – Sprawdzony sposób
na poprawę jakości kodu
Mariusz Chrapko
Inspekcja bardzo źle nam się kojarzy. Mamy Inspekcję
Budowlaną, Transportu Drogowego, Państwową Inspek-
cję Pracy, Inspekcję Weterynaryjną, Sanitarną, Ochrony
Roślin i Nasiennictwa, Inspekcję Zakładową… Można by
wymieniać bez końca… Prawda jest taka, że jak słyszy-
my to słowo, automatycznie wiemy, że ktoś będzie kogoś
lub coś sprawdzał. A my nie lubimy kontroli. Kontrola za-
kłada, że ktoś może być winny. W artykule będzie o zu-
pełnie innym rodzaju inspekcji – Inspekcji Kodu.
FELIETON
70 Niemiecki rynek czeka na polskich
specjalistów IT
Agnieszka Kropelnicka, agencja PRaktycy
Polscy informatycy i programiści są na wagę złota. Dy-
namicznie rozwijający się rynek usług związany z branżą
nowych technologii przyciąga do Polski firmy zagranicz-
ne. Wszystko wskazuje na to, że obecnie najbardziej na-
stawieni na pozyskiwanie naszych specjalistów z branży
IT są Niemcy. Wiele polskich firm dzięki outsourcingowi
już teraz podbija rynek niemiecki, po 2011 roku, gdy Pol-
ska uzyska formalny dostęp do pracy u naszego zachod-
niego sąsiada, może okazać się, że najlepszych zacznie
brakować nad Wisłą.
KONKURS
68 Stwórz aplikację i wygraj 30 tysięcy złotych
GG.pl
Trwa Konkurs dla developerów aplikacji do GG.pl i Ga-
du-Gadu, któremu patronuje Software Developer’s Jour-
72 Web 2.0 zagrożeniem dla biznesu?
Marta Szczepańska, agencja PRaktycy
Narzędzia sieci społecznościowych w coraz większym
zakresie wpływają na sposób prowadzenia biznesu.
Trzeba jednak pamiętać, że technologie te wnoszą też
duże ryzyko do przedsiębiorstwa. Przy setkach milio-
nów użytkowników są bardzo atrakcyjnym celem dla ha-
kerów. Lista zagrożeń jest długa: robaki sieci społecz-
nościowych, phishing, trojany, botnety, APT czy wycie-
ki danych. Przy dużym zaufaniu do sieci społecznościo-
wych, a zarazem braku ich kontroli można narazić firmę
na ogromne ryzyko. Jak się go ustrzec?
Miesięcznik
Software Developer’s Journal
(12 numerów w roku)
jest wydawany przez Software Press Sp. z o.o. SK
Redaktor naczelny:
Łukasz Łopuszański
lukasz.lopuszanski@software.com.pl
Skład i łamanie:
Tomasz Kostro
www.studiopoligraficzne.com
Kierownik produkcji:
Andrzej Kuca
andrzej.kuca@software.com.pl
Adres korespondencyjny:
Software Press Sp. z o.o. SK,
ul. Bokserska 1, 02-682 Warszawa, Polska
tel. +48 22 427 36 91, fax +48 22 224 24 59
www.sdjournal.org cooperation@software.com.pl
NARZĘDZIA
Dział reklamy:
adv@software.com.pl
Redakcja dokłada wszelkich starań, by publikowane
w piśmie i na towarzyszących mu nośnikach informacje i programy
były poprawne, jednakże nie bierze odpowiedzialności za efekty
wykorzystania ich; nie gwarantuje także poprawnego działania
programów shareware, freeware i public domain.
76 FastReport.Net
FastReport.Net jest generatorem raportów z wieloma
funkcjami dla deweloperów, korzystających z Microsoft
Visual Studio 2005 oraz 2010, Delphi Prism lub z dowol-
nego innego narzędzia do opracowywania, które współ-
pracuje z .NET Framework 2.0 i kolejnymi wersjami.
Wszystkie znaki firmowe zawarte w piśmie są własności odpowiednich
firm.
Zostały użyte wyłącznie w celach informacyjnych.
Osoby zainteresowane współpracą prosimy o kontakt:
cooperation@software.com.pl
www.sdjournal.org
3
BIBLIOTEKA MIESIĄCA
usuwanie elementów
Efektywne usuwanie elementów przy pomocy biblioteki STL
Programisto C++! Czy jesteś pewien, że wykorzystujesz
w praktyce potencjał swojej wspaniałej biblioteki
standardowej? Jeśli chcesz się przekonać, czy Twoja wiedza
na temat usuwania elementów z STL-owych kontenerów
jest pełna, to koniecznie przeczytaj poniższy artykuł!
Dowiesz się:
• Dlaczego remove() jest najbardziej zdradliwym algorytmem z
biblioteki STL,
• Jak efektywnie usuwać elementy z kontenerów STL-owych.
Powinieneś wiedzieć:
• Solidna znajomość podstaw języka C++;
• Solidna znajomość podstaw biblioteki STL;
ciego artykułu z cyklu
STL w praktyce
. Mam
nadzieję, iż poprzednie tekst z tej serii (
STL
w praktyce: wyszukiwanie
oraz
STL w praktyce: sorto-
wanie
) przekonały Cię, że standardowa biblioteka wzor-
ców języka C++ kryje w sobie sporo ciekawych niespo-
dzianek.
Tym razem, chciałbym zainteresować Ciebie tema-
tem usuwania elementów z kontenerów STL.
nieprzyjaciół. Obraz gry przesuwa się z lewej na prawą
stronę. Zza prawej krawędzi ekranu wylatują coraz to
nowi przeciwnicy, a gdy docierają do części lewej – od-
latują i nikną na zawsze w przepastnych głębinach ko-
smosu. Bardzo prosty prototyp takiej gry mógłby wyglą-
dać tak jak pokazano na Rysunku 1.
Twoim pierwszym zadaniem jest oprogramowanie ta-
kiego właśnie prototypu. Jako że jesteś fanem biblio-
teki STL, zdecydowałeś się przechowywać obiekty re-
prezentujące przeciwników w kontenerze
std::vector
.
Jednakże ciągłe dodawanie elementów do wektora (no-
wi przeciwnicy wlatujący z prawej strony) bez usuwania
ich w żaden sposób, nie wydaje się być dobrym pomy-
Dlaczego właśnie usuwanie?
Patrząc na tytuł niniejszego artykułu zapewne zada-
jesz sobie pytanie:
dlaczego właśnie usuwanie!
Czy
już nie ma ciekawszych tematów? Cóż, być może i są
takowe, ale usuwanie elementów z kontenerów STL (a
zwłaszcza – z kontenerów zajmujących ciągły obszar
pamięci) kryje w sobie pewien haczyk. Haczyk ten
wiąże się z algorytmem
remove()
, który śmiało mógł-
by kandydować do miana najbardziej zdradliwego al-
gorytmu wchodzącego w skład biblioteki standardowej
języka C++. Biorąc po uwagę to, iż usuwanie elemen-
tów to, jak by nie patrzeć, jedno z najbardziej elemen-
tarnych działań w codziennej praktyce programisty,
uznałem że warto napisać na ten temat niedługi, ale
za to odrębny artykuł.
Przygoda w kosmosie...
Wyobraź sobie, że piszesz w języku C++ grę – klasycz-
ną kosmiczną strzelaninę – w której atakują Cię hordy
Rysunek 1.
Bardzo prosty prototyp kosmicznej strzelaniny
4
12/2010
STL w praktyce:b
D
rogi Czytelniku, zapraszam Cię do lektury trze-
Usuwanie elementów pomocy biblioteki STL
słem. Najprostszym rozwiązaniem wydaje się być usu-
wanie przeciwników, którzy opuścili obszar ekranu gry.
Spróbujmy coś takiego zrealizować. Aby nieco ubar-
wić nasze zadanie załóżmy, że obiekty reprezentują-
ce przeciwników alokujemy dynamicznie i trzymamy
je za pomocą inteligentnych wskaźników, które z ko-
lei są przechowywane w kontenerze. Na początek zde-
finiujmy sobie prostą klasę reprezentującą przeciwnika
(patrz: Listing 1).
Klasa ta zawiera dwa pola: nazwę oraz flagę określa-
jącą czy przeciwnik jest aktywny. Kod renderujący na-
szego przeciwnika celowo został uproszczony (po pro-
stu wypisujemy jego nazwę na standardowym wyjściu).
Oprócz tego dołączona jest również definicja typu dla
sprytnego wskaźnika na obiekt typu
Enemy
oraz global-
na funkcja sprawdzająca stan jego aktywności (rola tej
funkcji będzie wyjaśniona kilka akapitów niżej). W ko-
lejnym kroku zdefiniujemy klasę reprezentującą grupę
przeciwników (patrz: Listing 2).
Zadaniem tej klasy jest opakowanie wektora inte-
ligentnych wskaźników na przeciwnika i udostępnie-
nie prostego, użytecznego interfejsu do zarządzania
grupą obiektów. Na tym etapie jest tam wszystko cze-
go potrzebujemy: możliwość dodania nowych przeciw-
ników do grupy, możliwość narysowania wszystkich
przeciwników z grupy i – to co nas najbardziej intere-
suje – możliwość usunięcia z grupy przeciwników któ-
Listing 2.
Implementacja klasy EnemyGroup
#include
<vector>
#include
<boost/foreach.hpp>
#deine foreach BOOST_FOREACH
class
EnemyGroup
{
public
:
typedef
std
::
vector
<
EnemyPtr
>
EnemyPtrVec
;
typedef
EnemyPtrVec
::
iterator
EnemyPtrVecIter
;
typedef
EnemyPtrVec
::
const_iterator
EnemyPtrVecConstIter
;
Listing 1.
De�nicja klasy reprezentującej przeciwnika
#include
<iostream>
#include
<string>
#include
<boost/shared_ptr.hpp>
void
Render
()
{
foreach
(
EnemyPtr
enemy
,
m_enemies
)
{
enemy
->
Render
();
}
}
class
Enemy
{
public
:
Enemy
(
const
std
::
string
&
name
,
bool
isAlive
=
true
)
:
m_name
(
name
)
,
m_isAlive
(
isAlive
)
{}
EnemyPtr
At
(
int
index
)
{
return
m_enemies
[
index
];
}
void
Render
()
{
std
::
cout
<<
m_name
<<
std
::
endl
;
}
bool
IsAlive
()
const
{
return
m_isAlive
;
}
void
SetIsAlive
(
bool
isAlive
)
{
m_isAlive
=
isAlive
;
}
void
AddEnemy
(
EnemyPtr
enemy
)
{
m_enemies
.
push_back
(
enemy
);
}
private
:
std
::
string
m_name
;
bool
m_isAlive
;
}
;
void
RemoveDeadEnemies
()
{
// TODO.
}
typedef
boost
::
shared_ptr
<
Enemy
>
EnemyPtr
;
int
Size
()
const
{
return
m_enemies
.
size
();
}
bool
IsNotAlive
(
EnemyPtr
enemy
)
{
return
!
enemy
->
IsAlive
();
}
private
:
std
::
vector
<
EnemyPtr
>
m_enemies
;
}
;
www.sdjournal.org
5
Plik z chomika:
scrum
Inne pliki z tego folderu:
SDJ 03.2011 PL.pdf
(8875 KB)
SDJ 02.2011 PL.pdf
(14257 KB)
SDJ 01.2011 PL.pdf
(13720 KB)
SDJ 12.2010 PL.pdf
(12546 KB)
SDJ 11.2010 PL.pdf
(14189 KB)
Inne foldery tego chomika:
ArchiMate
ATAM
BABOK
BPML
BPMN
Zgłoś jeśli
naruszono regulamin