Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> oop początki...
Mavestinus
post 13.05.2004, 20:12:22
Post #1





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 6.04.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Witam!
Zaczynam właśnie pisać obiektowo w php winksmiley.jpg
Na początku napisałem taki kod:[php:1:0382d19591]<?php
class moja{
var $txt;
function dodaj($co){
$this->txt .= $co;
}

function wypisz(){
echo $this->txt;
}

function dlugosc(){
echo('<br>Tekst ma długość: ' . strlen($this->txt) . ' znaków.');
}
}
$obiekt=new moja;
$obiekt->dodaj('tekst');
$obiekt->wypisz();
$obiekt->dlugosc();
?>[/php:1:0382d19591]I teraz mam kilka pytań co do tego kodu:
- czy da się go zapisać 'bardziej' obiektowo?
- czy lepiej jest wszystko przerzucić na funkcje czy lepiej operować na 'zwykłych' funkcjach (np. lepiej użyć funkcji wypisz() czy echo $obiekt->txt;)?
Sorry za lamerskie pytania ale oop to na razie dla mnie czarna magia...


--------------------
pozdrawiam.
Go to the top of the page
+Quote Post
Aiker
post 13.05.2004, 20:32:32
Post #2





Grupa: Zarejestrowani
Postów: 63
Pomógł: 0
Dołączył: 9.09.2003
Skąd: K-ce

Ostrzeżenie: (0%)
-----


Ta klasa jest moim zdaniem dobrze napisana pod wzgledem obietowym. Ja uwazam ze lepiej jest pisac funkcje dostepowe do zmiennych w klasach w tym przypadku do zmiennej txt


--------------------
GG: 4985254 ICQ: 349-850-679
Warsztat : Apache 2|MySQL 5|php 5.1|
Go to the top of the page
+Quote Post
evo
post 13.05.2004, 20:40:10
Post #3





Grupa: Zarejestrowani
Postów: 110
Pomógł: 0
Dołączył: 4.02.2003

Ostrzeżenie: (0%)
-----


Na poczatek to sie zastanow dokladnie po co ci te objekty i co one ci dadza? Jesli nie potrafisz odpowiedziec na te pytanie przekonujaca to zostan przy strukturalnym projektowaniu. Ogladajac kod roznych programistow stwierdzilem ze w php klasa nie jest rowna Objektowi. Duza ilosc programistow php uzywa klas do zagniezdzenia funkcji. Wiec jesli nie zabardzo wiesz z czym sie OOP je to tez je do tego uzywaj winksmiley.jpg

Pisze tak bo twoj przyklad klasy oraz twoje pierwsze pytanie nie daje mi wrazenia bys myslal objektowo.

Ze w php zrobila sie moda na pseudo OOP to juz inna sprawa winksmiley.jpg

Waracajac do tematu.

Kazdy objekt ktory stworzysz bedzie mial jakies wlasciwosci i metody. W PHP4 nie mam mozliwosci blokady dostepu do wlasciwosci bezposrednio, wiec jak bedziesz sie do nich odwolywal nie ma wiekszej roznicy jesli chodzi o bezpieczenstwo czy wydajnosc.

Uzywajac metod dostepu do wlasciwosci (get) oraz zmian czy zapisu (set) da ci w PHP4 tylko przejzystosc kodu.




Pozdrawiam
evo
Go to the top of the page
+Quote Post
Mavestinus
post 13.05.2004, 20:53:19
Post #4





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 6.04.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Hmmm.... radzisz mi żebym został przy programowaniu strukturalnym, jednak jest jedno ale... zauważyłem że wszystkie większe projekty (cms'y, fora np. phpbb) są pisane obiektowo więc zechciałem równierz zacząć tak pisać winksmiley.jpg. Skoro jednak oop w php (4) jest takie fe dlaczego jet tak powszechnie używane i polecane? (wiele osób radziło mi już aby poprzestać pisanie strukturalne...).


--------------------
pozdrawiam.
Go to the top of the page
+Quote Post
dag
post 13.05.2004, 21:01:18
Post #5





Grupa: Zarejestrowani
Postów: 180
Pomógł: 0
Dołączył: 24.12.2003

Ostrzeżenie: (0%)
-----


Nikt Ci nie radzi abyś pozostał przy strukturalnym, lub abyś wszystko pisał w OOP. Trzeba wiedzieć co pisać w OOP a co w strukt.

Kod w OOP jest tańszy w utrzymaniu, szybciej się wprowadza zmiany, często jest bardziej czytelny (pod warunkiem dobrych nawyków programisty), kosztem wydajności. Choć nie są to jakieś ogromne liczby.

PS. Pokręć się wokół php 5. Z bezpieczeństwem w OOP w piątce jest już znacznie lepiej, spójrz choćby na private, protected i public.
Go to the top of the page
+Quote Post
nexis
post 14.05.2004, 07:59:55
Post #6





Grupa: Zarejestrowani
Postów: 1 012
Pomógł: 109
Dołączył: 26.09.2003
Skąd: nexis.pl

Ostrzeżenie: (0%)
-----


Cytat
czy lepiej operować na 'zwykłych' funkcjach


Nie wiem czy tobie chodzi o "wyzwanie", ale jeśli chodzi o sam wynik to nie prościej:

[php:1:c8ef24ad41]<?php
$text="To jest tekst"; //posiada 13 znaków
$length=strlen($text);
echo "Tekst ma $length znaków."; //zwróci wartość 13 znaków
?>[/php:1:c8ef24ad41]

A jeśli chodziło o bardziej zaawansowane osiągnięcie tego samego wyniku to przepraszam za zaśmiecanie forum. smile.gif
Go to the top of the page
+Quote Post
Mavestinus
post 14.05.2004, 12:44:30
Post #7





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 6.04.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


O to właśnie mi chodziło - czy przy większym kodzie nie jest wydajniej (i lepiej tzn. czytelniej) zapisać to samo tylko obiektowo winksmiley.jpg ?.


--------------------
pozdrawiam.
Go to the top of the page
+Quote Post
shima
post 14.05.2004, 13:31:56
Post #8





Grupa: Zarejestrowani
Postów: 245
Pomógł: 0
Dołączył: 9.09.2002

Ostrzeżenie: (0%)
-----


Cytat
O to właśnie mi chodziło - czy przy większym kodzie nie jest wydajniej (i lepiej tzn. czytelniej) zapisać to samo tylko obiektowo winksmiley.jpg ?.


OOP stało się ostatnio niezwykle modne, jest trendy mieć zdanie na temat i robić wrażenie orientujacego się. Zwykle wyraża się to poprzez krytykę (patrz wyżej). OK, koniec komentarza.

Programowanie zorientowane obiektowo to po prostu sposób na bardziej efektywne, czytelne, ekonomiczne wykorzystanie kodu. W przypadku języków czysto obiektowych (JAVA) nie masz wyboru i używasz obiektów, ale w przypadku języków takich jak php czy C++ masz wybór. Tworzenie kodu OOP ma sens szczególnie w przypadkach, gdy mamy do czynienia z bardziej rozbudowanym kodem i gdy przewidujemy, że nasz kod będzie ulegał częstej modyfikacji, rozbudowie etc. Prościej jest opanować części samochodowe, gdy mówimy lewym, tylnym kole samochodu (obiekt - składnik) niż o kole numer 1254, które przypadkiem jest tylnym, lewym kołem mojej syrenki. Tworząc klasę tworzysz niejako jej opis, sposób konstrukcji samochodu, więc kiedy budujesz konkretny egzemplarz, nie musisz po kolei budować poszczególnych części, tylko niejako mówisz: zbuduj mi samochód na podstawie tej instrukcji (definicja klasy). Reszta Cię nie interesuje. Wniosek: jeżeli chcesz zbudować jeden samochód, to możesz zrobić to krok po kroku, strukturalnie lub liniowo. Jeżeli samochodów ma być więcej, lepiej napisać instrukcję.
Kolejny aspekt to rozszerzalność. Jeżeli Twój samochód ma mieć wiele modeli, to możesz stworzyć klasę potomną (klasy potomne) które od klasy macierzystej różnić się będą jedynie wersją wyposażenia czy średnica kół. Nie musisz od początku pisać całej instrukcji, tylko dodajesz: zrób taki sam samochód, tylko daj skórzaną kierownicę. Zysk aż nadto ewidentny.

A Twój przykład, aczkolwiek może nie jest ekonomicznie uzasadniony, jako wprawka jest OK. Rób swoje, trenuj i nie daj się zniechęcić.


--------------------
Nie ma nic stałego prócz zmiany...
Go to the top of the page
+Quote Post
scanner
post 17.05.2004, 09:01:46
Post #9





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Mam dwie uwagi, do powyzszego kodu.
1. Brak konstruktora
2. Brak przygotoania do ew. użycia szablonów.

Jeśłi mogę zaproponować:[php:1:c6db3010ea]<?php
class String
{
var
$strString;

function String()
{
$this->strString = '';
}

function Add( $strStringToAdd )
{
if( $this->GetLength() == 0 )
{
$this->strString = $strStringToAdd;
}
else
{
$this->strString .= $strStringToAdd;
}
}

function Get()
{
return $this->strString;
}


function GetLength()
{
return strlen( $this->strString );
}

}

$String = new String();
$String->strString = 'Foo';
echo $String->GetLength();
echo '<br />';
$String->Add( 'Bar' );
echo 'Nowy string o tresci '.$String->Get().' ma dlugosc: '.$String->GetLength().' znakow.';
echo '<br />';
?>[/php:1:c6db3010ea]Zwróć uwagę na dwukrotne użycie metody GetLength - w Twoim kodzie takie działanie nie jest możliwe.

A zgadzająć się z shimą, wszystkim "komentatorom" pragnę przypomnieć, zę naukę zaczyna się od podstaw (czasem przekombinowanych, ale przynajmneij coś wyjaśniających).
W szkołach muzycznych uczą grać gamy na początek a nie koncertów symfonicznych.


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
Mavestinus
post 17.05.2004, 21:29:04
Post #10





Grupa: Zarejestrowani
Postów: 21
Pomógł: 0
Dołączył: 6.04.2003
Skąd: Katowice

Ostrzeżenie: (0%)
-----


Dzięki scanner i shirma - wy najbardziej mi pomogliście smile.gif.


--------------------
pozdrawiam.
Go to the top of the page
+Quote Post
tsharek
post 18.05.2004, 19:50:11
Post #11





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

Ostrzeżenie: (0%)
-----


Cytat
[php:1:fa8cabb8ee]<?php
function Add( $strStringToAdd )  
   {  
       if( $this->GetLength() == 0 )  
       {  
           $this->strString = $strStringToAdd;  
       }  
       else  
       {  
           $this->strString .= $strStringToAdd;  
       }  
   }  
?>[/php:1:fa8cabb8ee]


hmmm... czy to rozwiązanie jest optymalne? wydaje mi się że lepiej by było
[php:1:fa8cabb8ee]<?php
function Add( $strStringToAdd )
{
$this->strString .= $strStringToAdd;
}
?>[/php:1:fa8cabb8ee]
gdyż i tak na początku w konstruktorze jest $this->strString = '', a wywołanie dodatkowej metody(GetLength) tylko powiększy czas wykonania:)
ot takie zastanawianie się też nowicjusza biggrin.gif
Go to the top of the page
+Quote Post
dag
post 18.05.2004, 21:00:13
Post #12





Grupa: Zarejestrowani
Postów: 180
Pomógł: 0
Dołączył: 24.12.2003

Ostrzeżenie: (0%)
-----


Ale tu raczej chodziło o jakieś bardziej zaawansowane przykłady, gdzie dla bezpieczeństwa liczy się przede wszystkim poprawność danych - kontrola typu. Czyli zamiast sprawdzać czy jest puste sprawdzić choćby czy jest liczbą, stringiem etc. Myślę, że Scanerowi o to właśnie chodziło, aby wpoić początkującym tego typu nawyki podwyższające bezpieczeństwo.
Go to the top of the page
+Quote Post
tsharek
post 18.05.2004, 21:29:49
Post #13





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

Ostrzeżenie: (0%)
-----


do tego raczej przydał by się inny przykład a nie takie coś co jest niezoptymalizowane tongue.gif dobre nawyki dobrymi nawykami a dobry kod to swoją drogąsmile.gif
Go to the top of the page
+Quote Post
scanner
post 18.05.2004, 22:35:56
Post #14





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Cytat
(...)takie coś co jest niezoptymalizowane (...) dobre nawyki dobrymi nawykami a dobry kod to swoją drogąsmile.gif
W pełni się zgadzam. KOd pokazany powyzej powstawał w chwili, gdy miałem w pokoju w pracy troche głosno i mi się mysli i koncepcja rozjechała.
Co nie zmienia faktu, ze chciałem zademostrować autorowi wątku wydzielenie warstwy prezentacji od warstwy logiki, co zresztą już opisałem pod kodem, pisząć
Cytat
Zwróć uwagę na dwukrotne użycie metody GetLength - w Twoim kodzie takie działanie nie jest możliwe.
smile.gif


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
tsharek
post 18.05.2004, 22:46:01
Post #15





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

Ostrzeżenie: (0%)
-----


nic na siłę:)
Go to the top of the page
+Quote Post
scanner
post 19.05.2004, 06:14:27
Post #16





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Do czego pijesz?
Pamietaj, ze przykłady mogą być idiotyczne, bo nauka sposobu myślenia to jedno, a nauka tworzenia optymalnego kodu p[rodukcyjnego to drugie.
Powyższy przykład w ogóle nie ma racji bytu, bo budowa klasy do wypisywania długości stringa już samo w sobie jest nieoptymalne.

Inna sprawa, ze czytanie naszych komentarzy o nieoptymalniości też jest formą nauki smile.gif


--------------------
scanner.info
Warto pamiętać: KISS, DRY
Go to the top of the page
+Quote Post
dag
post 19.05.2004, 09:28:18
Post #17





Grupa: Zarejestrowani
Postów: 180
Pomógł: 0
Dołączył: 24.12.2003

Ostrzeżenie: (0%)
-----


Ja wczoraj pisząc swojego posta o bezpieczeństwie byłem w stanie lekko nietrzeźwym więc trochę nakręciłem ;-)
Go to the top of the page
+Quote Post
tsharek
post 19.05.2004, 09:39:41
Post #18





Grupa: Zarejestrowani
Postów: 300
Pomógł: 1
Dołączył: 22.09.2003
Skąd: Czeladź

Ostrzeżenie: (0%)
-----


Cytat
Inna sprawa, ze czytanie naszych komentarzy o nieoptymalniości też jest formą nauki smile.gif


i o to chodzi:) właśnie dlatego lubię to forum że można nauczyć się wielu rzeczy i to od rużnych, całkowicie odmiennych podejść. biggrin.gif/
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 8.07.2025 - 09:29