Toate articolele scrise de Madalin

Copii morti din cauza rujeolei

Un copil de nouă luni din Constanţa, nevaccinat, a murit din cauza rujeolei, numărul deceselor ajungând la 46. Un posibil deces din cauza rujeolei, în Brăila, se află în curs de confirmare. Peste 200 de noi cazuri de îmbolnăvire s-au înregistrat în ultima săptămână, cele mai multe în judeţele Vaslui şi Brăila.

Un bebeluș din Constanţa, nevaccinat, a murit din cauza rujeolei. Numărul deceselor a ajuns 46 – Digi24.ro

Este trist ce se intampla in Romania. Procentual, la nivelul populatiei, Romania ocupa primul loc in Europa in acest caz.

Motivul principal?

Din toate stirile citite in ultimul an, nevaccinarea bebelusilor.

De ce nu sunt vaccinati unii copii impotriva rujeolei?

In Romania, vaccinul ROR nu este obligatoriu de facut. Ar putea fi facut cand bebelusul are 12 luni implinite. Poate fi administrat mai devreme daca bebelusul sub 12 luni este expus virusului sau daca este epidemie generala. Urmatorul vaccin se face la circa 5 ani.

In alte tari Europene, acest vaccin, optional in majoritatea tarilor, se face la 6 luni primul si al doilea la 3 ani.

Personal cred ca vina majora este a celor ce prin mediul social, in special online, influenteaza familiile romane sa refuze vaccinul, venind cu exemplificari prin cazuri izolate si extrem de rare de probleme aparute in urma vaccinului.

Doar cautand online pe Google, puteti gasi mai multe bloguri personale cu pareri impotriva vaccinurilor. Acesti oameni care publica astfel de articole nu au cunostinte oficiale de medicina, in special pediatrie. As considera ca acesti oameni sufera de paranoia si incearca prin crezul lor sa influenteze negativ familiile cu copii.

Tinand cont de toate cazurile de rujeola si de decese din cauza ei din intervalul 2016-2018, poate ar fi necesar justitia romana sa investigheze si influenta din mediul online, TV si presa scrisa care duce la cresterea numarului de refuzuri vaccinului. Sunt multe persoane care ar trebui acuzate de influenta ce a dus la decesul multor copii in acest interval si trebuie sa raspunda in fata justitiei si familiilor indoliate pentru aceasta.

Daca este bine sau nu este bine sa fie oricare vaccin la un copil as dori sa isi poata spuna public parerea doar specialistii in domeniu.


Cum sa ne protejam impotriva folosirii datelor noastre personale?

Recent Facebook s-a impotmolit intr-un scandal international in legatura cu implicatia sa indirecta in castigarea presedentiei Statelor Unite de catre Trump. Scandalul se extinde la o caracatita imensa.

Pentru a afla despre, puteti incepe prin a urmari prima parte a investigatiei facute de canalul independent de televiziune Britanica, Channel 4: 

Whistleblower reveals to Channel 4 News data grab of 50 million Facebook profiles by Cambridge Analytica – data firm linked to Trump win

Trebuie sa ne asteptam ca lucruri asemanatoare se petrec si in Romania.

Intrebarea este cum ne putem proteja, si nu numai, de ce trebuie sa ne protejam si cum va influenta acest lucru daca va fi facut de marea majoritate a utilizatorilor de internet in special?

Nu doar Facebook, ci orice modalitate electronica de colectionare de date personala poate fi suspecta.

Retelele sociale, precum Facebook, Twitter, Linkedin si altele, ideal incearca a convinge oamenii sa isi completeze un profil cat mai detailiat.

Ca sa ne dam seama cum vor ajunge datele noastre personale in mainile cui nu trebuie, sa urmarim urmatorul scenariu.

Voi folosi un personaj fictiv, numit "Ioan Duma" pentru a exemplifica.

Personajul nostru are cont pe Facebook de peste 2 ani. Si-a completat detaliile personale, precum adresa, numar de telefon, varsta si interactionand pe Facebook de-alungul timpului a dat like la multe pagini, s-a inscris in diverse grupuri si a folosit diverse aplicatii care nu sunt create de Facebook direct.

Am evidentiat ultima parte, pentru ca e cea mai grava, e cea prin care se fura cel mai usor datele personale.

Sa dam exemplu de astfel de aplicatii.

Cu totii am observat pe Facebook postari la prieteni prin care si si-au facut diverse teste, de iq, de personalitate sau ca au jucat diverse jocuri.

Ceea ce nu au observat majoritatea care au facut asa ceva, este ca la interactionarea pentru prima data cu aplicatia, li s-a cerut acceptul ca sa le fie citite datele din profil si sa poata initia diverse actiuni pe profil, precum postarea pe wall si altele.

Groaznic este ca majoritatea dau accept fara a fi constienti la ce dau accept, si chiar sunt unii care nici macar nu citesc ce li se accepta.

Astfel, printr-o neatentie, datele noastre ajung in baza de date a unor entitati care au alte scopuri decat cele bine intentionate.

Aceasta nu inseamna ca nu trebuie sa aveti un cont complet pe Facebook. Ci inseamna sa fiti extrem de atenti la ce acceptati in orice accesati pe Facebook.

Reteaua Facebook permite un numar de setari de intimitate care va pot ajuta sa ocoliti astfel de furturi de date.

Singurul accept cand interactionati cu ceva pe Facebook cand va este cerut trebuie sa fie doar citirea profilului public.

Si important este sa avem setarile de intimitate adecvate pentru a nu permite nimanui in afara cercului de prieteni apropiati sa aibe acces mai mult decat ce lasam intentionat public.

In general am fost stupefiat sa vad si persoane apropiate, rude, postandu-si pozele copiilor lasandu-le publice pentru oricine din lume (poveste pentru un alt articol).

Acum sa va exemplific prin capturi de ecran si explicand cum cred ca e ideal sa ne facem setarile de intimitate si siguranta in Facebook.

Folosind site-ul web Facebook, la setari, confidentialitate va recomand sa va faceti setarile asemanator cu cele din imaginea urmatoare.

Setari si instrumente pentru confidentialitate | Facebook

Pentru a lua masuri impotriva postarilor precedente, folositi optiunea Limiteaza postarile din trecut.

Pentru a va asigura contul, la Securitate si conectare va recomand sa setati cele din Configurarea funcţiilor suplimentare de securitate.

Configurarea functiilor suplimentare de securitate

Astfel va veti asigura ca si daca vi s-ar fura parola de la cont, conectarea va fi imposibila si veti fi si notificati de o incercare nereusita.

Ulterior, pentru a curata contul, mergeti la zona Aplicatii si stergeti orice va este total necunoscut si suspect.

Aici puteti dezactiva aplicatiile care au acces la cont | Facebook

Aplicatii folosite de altii, dezactivand tot, oprim accesul la informatii personale care pot fi folosite si rau, desi ideal au fost intentionate pentru buna experienta pe Facebook.

Aplicatii folosite de altii | Facebook
Dezactivati tot pentru a nu mai putea fi citite pe viitor informatiile | Facebook

Si inca o setare poate chiar face extrema confidentialitatea contului impotriva aplicatiilor construite pe Facebook.

Aplicatii, site-uri web si pluginuri | Aka Platforma | Facebook
Aceasta va curata bine contul, dar datele deja citite vor ramane.

Acesta este minimul care il puteti face, si ulterior, cititi de multe ori detaliile accesului cerut de ceva ce interactioneaza cu dumneavoastra prin Facebook.

Cu alta ocazie, voi discuta si despre probleme cu Grupurile de Facebook.

Care limbaj de programare sa invat prima data?

Multi doritori sa abordeze ca profesie sau ca hobby programarea software sau web se intreaba cu ce limbaj de programare sa isi inceapa calatoria.

Suntem acum in 2018, si cele mai utilizate dispozitive in prezent sunt telefoanele mobile, urmate de tablete si ulterior laptopurile si desktopurile. Sa fim realisti, dispozitivele mobile au castigat detasat batalia. In diverse domenii de activitate, numarul de utilizatori ce acceseaza pagini web sau folosesc un serviciu printr-o aplicatie, a depasit 50%, in unele cazuri chiar si 75%.

Personal, daca ar fi sa reincep sa invat de la zero, m-as informa despre ce e cel mai cerut in prezent pentru mobile.

Simplificand, as avea de ales intre 2 modele de programare. Nativa, specializata pe dezvoltare de aplicatii ce se doresc a functiona cat mai perfect, si hibrida, respectiv tehnologii web.

Si in cazul nativ pentru mobile veti intalni diverse pareri despre tehnologii hibride ce permit cod reutilizabil atat pentru Android, cat si pentru iOS. Personal, nu m-as concentra initial deloc pe aceasta varianta mai mult disperata, plina de frustrari in proiecte medii si mari.

Nativ

Android

Mi-as incepe calatoria invatand notiunile de baza de Java. Pentru Android nu e necesar sa invatati Java la nivel de specialist. In prezent, Android Studio va ajuta sa concepeti aplicatiile folosind mai mult decat Java, lasand acest limbaj sa se ocupe exclusiv partea de logica, restul fiind facut in cea mai mare proportie prin unelte vizuale si foarte intuitive.

Un curs introductiv grozav si gratuit in Java il recomand pe cel de pe Udacity: Java Programming Basics. Cursul se adreseaza incepatorilor total si le va oferi elementele de baza necesare a intelege ulterior exemplele oferite de Google pentru Android.

Ulterior, avand idee ce e o clasa, o metoda, o variabila s.a.m.d., cursul de introducere in Android, tot de la Udacity, recomandat si facut in colaborare cu Google, Android development for beginners.

Odata ce ati capatat idee despre ce e in domeniul dezvoltarii de aplicatii pentru Android, puteti fie rumega efectiv documentatia oficiala, fie continua pe Udacity cursurile gratuite, ulterior cele platite. Personal gasesc documentatia oficiala sa acopere absolut totul, dar lipsa unei programe de invatare poate incetini straduinta oricui.

Pentru 2018+, deoarece Google/Android au adoptat Kotlin ca limbaj de programare, as arunca un ochi pe documentatie, cel putin pe tot ceea ce are legatura cu Android. Avand o introducere in Java, Kotlin nu va parea strain, mai ales ca e mai simplist, mai uman ca sintaxa. Va fi foarte util pentru proiecte noi.

iOS

Nu sunt foarte cunoscator in zona Apple, si as completa cu cea mai mare placere un sfat si pentru iOS.

Ceea ce am experimentat, a fost sa incerc in cateva cazuri Xcode, IDE-ul oficial de la Apple, si am fost incantat sa descopar functionalitate similara cu Android Studio pentru partea grafica in constructia "activitatilor" (nu cunosc termenul pentru iOS, echivalent in Android).

Presupun ca abordarea ar fi in aceeasi pasi ca si pentru Android, in cazul acesta fiind limbajul de programare swift. Un bun start care l-am gasit e in documentatia oficiala, care va ajuta ca total necunoscator sa construiti o aplicatie cu scopul de a va familiariza cu tot conceptul.

Voi reveni cu o completare separata, cand imi voi rezerva timpul de a parcurge si eu aceasta.

Hibrid

Tehnologiile web au un mare succes in a scrie aplicatii mobile.

Viitorul garantat il vad personal in dezvoltarea de Single Page Application.

Cu toate ca existe zeci de framework-uri ce va promit dezvoltarea de aplicatii mobile ce vor merge si pe Android, si pe iOS, si chiar si pe Windows Phone (Windows 10+), ca incepator as sta cat mai departe initial de ele. Veti fi indoctrinati cu a face lucrurile intr-un mod anume, si va va limita posibilitatile de cariera in domeniu.

In cazul tehnologiilor web avem un limbaj candidat esential: JavaScript.

JavaScript este folosit atat pentru browsere web, servicii ce ruleaza pe servere, cat si pentru aplicatiile hibride mentionate acum 2 paragrafe.

La fel ca si o introducere in Java, un curs introductiv in JavaScript va va oferi aceleasi notiuni elementare de programare, ce sunt comune intre toate limbajele.

Cursul de la Udacity, Intro to JavaScript, va va oferi gratis startul in a intelege limbajul.

Personal as insista pentru un incepator sa incerce varianta nativa, Java + Android sau Swift + iOS. Dupa 8 ani de cariera si 10 ani ca hobby in programare web (JavaScript si PHP in special), am ajuns la concluzia ca totul devine mult prea complicat din cauza la "fiecare face dupa cum il duce capul" si cu toate ca veti intalni extrem de multa lume care sa va convinga in a va arunca in JavaScript de la inceput, va sfatui sa fiti mai reticenti si sa va ganditi bine.

Nu regret toti acesti ani, si recunosc ca zecile de proiecte in care am fost implicat pentru a-mi castiga salariul, m-au facut sa invat enorm de mult, dar aceasta a fost si mai ales pentru ca a trebuit in majoritatea timpului sa repar si sa refac dupa altii.

Ca idee totusi, amandoua platformele mobile majore, Android si iOS, se indreapta inspre a oferi un suport mult mai bun pentru JavaScript, folosind conceptul de WebView. Astfel puteti construi website-uri pe conceptul de Single Page Application, care daca implica si conceptul de Progresive Web Application, puteti oferi in majoritatea cazurilor solutii alternative.

Calea de a invata constructia de aplicatii web profesionale care ruleaza atat ca aplicatie mobila cat si ca website de calitate, necesita mult mai mult timp decat alternativa nativa.

Trendul de cerere de programatori avansati JavaScript pentru aplicatii hibride a inceput sa scada in tarile vest europene recent, pentru ca concurenta startup-urilor cu varianta nativa pentru acelasi tip de serviciu pur si simplu intrece calitatea posibila.

Tehnologiile hibride nu ofera acces la capabilitatile complete oferite de SDK-ul nativ al sistemului de operare nativ.

Jocuri mobile sau desktop

Aceasta categorie nici macar nu mai are nevoie de multe aliniate.

Cel mai usor de abordat mediu pentru incepatori este platforma Unity si limbajul utilizat (din nou doar pentru logica din jocuri) este C#.

Am avut ocazia sa cunosc pe cineva care nu are nici o legatura cu limbajele de programare, si care isi castiga existenta construind jocuri pentru Android.

Este simplu. Tot ce aveti nevoie pentru a incepe gasiti in documentatia oficiala Unity. Pana nu o parcurgeti, ideal ar fi sa stati departe de cursuri de pe Youtube si alte website-uri (chiar si platite), pentru ca va va limita cunostintele doar la cateva preconcepte ale autorilor despre cum s-ar construi un joc.

Concluzie

Sa scurtez totul, limbajul de start in 2018 pe care l-as alege, ar fi Java si as incerca o cariera ca programator pentru Android. Restul vor veni de la sine, inclusiv iOS si Web/JavaScript.

Aplicatiile native incep din nou sa fie la mare cerere datorita concurentilor ce ofera acelasi serviciu si aceasta duce la necesitatea calitatii superioare aplicatiilor.

Interes in trading forex

Recent mi s-a trezit interesul asupra unui domeniu diferit de natura profesiei mele.

Forex trading.

De cateva saptamani am inceput sa citesc tot mai mult despre pietele financiare, cum functioneaza, influentele principale si in paralel sa incerc conturi demonstrative (care nu implica utilizarea de bani reali) pentru a incerca diversi brokeri de CFD-uri.

In continuare, in functie de cum simt ca evolueaza research-ul meu, vreau sa impartasesc cu voi experienta si sper ca la momentul care se va intampla succesul, sau esecul.

Pentru a te tine la curent, urmareste noutatile in categoria principala Trading.

Nota: tradingul (negotul) cu CFD-uri (contracte contra diferenta) au un factor de risc foarte ridicat ce pot duce la pierderi financiare personale foarte mari. Orice articol scris de mine in legatura cu FOREX, trading, CFD si investitii financiare sunt pur si simplu opinii personale si nu sunt sfaturi adresate. Orice persoana care va incerca sa foloseasca orice este mentionat de mine prin acest website, o va face pe propria raspundere si nu va putea acuza autorul acestui website pentru esecul cauzat.

Elementul <script>

Principala metoda de a adauga JavaScript intr-o pagina web este folosirea elementului <script>.

Elementul <script> suporta 6 parametri:

  • src – optional. Indica fisierul script.
  • async – optional. Indica faptul ca scriptul va fi downloadat imediat, dar orice alta actiune va continue in paralel (incarcarea restului de html, resurse css, imagini etc.). Este valid doar pentru folosirea de fisiere JavaScript prin referirea surse prin parametrul src. Codul va rula in momentul in care e incarcat, astfel daca depinde ca fisierul html sa fi fost incarcat complet, parametrul defer trebuie sa il insoteasca.
  • defer – optional. Indica faptul ca rularea scriptului poate fi amanata in siguranta pana cand continutul documentului a fost incarcat si afisat. La fel, este valid doar pentru fisiere JavaScript referentiate prin parametrul src.
  • type – optional/nerecomandat. Inlocuieste elementul language. Indica tipul de continut (MIME type) al limbajului de script folosit. Prestabilit acesta este „text/javascript”. Alternativ se mai poate folosi „text/ecmascript”, dar amandoua sunt depreciate. Actualul standard este „application/x-javascript”, incompatibila cu browsere vechi. Recomdarea este sa nu fie utilizata pentru a lasa browserele sa foloseasca valoarea lor prestabilita si astfel orice problema va fi ocolita.
  • language – optional/depreciat. Initial indica limbajul de script prin valorile „JavaScript” , „JavaScript1.2” , or „VBScript”. Orice browser din ultimii ani il ignora complet.
  • charset – optional/inutil. Candva indica codul de caractere din fisierul indicat de src, dar aproape nici un browser nu il mai utilizeaza. Codul de caractere este indicat de headerul fisierului JavaScript transmis de serverul web.

Putem folosi cod JavaScript in paginile web prin doua metode. Prima, prin inserarea codului in interiorul elementului <script></script>, sau prin referirea unui fisier JavaScript <script src=”js/script.js”></script>.

Elementul <script> poate fi plasat atat in zona <head> a fisierului html cat si ori unde in zona <body>. Recomandarea este sa fie plasat inainte de inchiderea zonei <body> pentru fisiere JavaScript si in <head> pentru cod in linie.

Pentru a ocoli erori, e necesara intelegerea momentului cand secventele de cod JavaScript vor rula pentru a sti cum declansam atat incarcarea, cat si rularea codului.

Fara parametrii defer si async, codul din fisierul JavaScript incarcat, va fi incarcat si rulat blocand incarcarea altor resurse, in special a fisierului html.

Exista multiple metode pentru a scrie codul JavaScript prin care ceea ce intentionam sa ruleze se va intampla la momenul necesar. Urmareste publicarea unui articol dedicat acestor metode.

Clase abstracte

Articol in lucru…

O clasa abstracta este o clasa schelet care poate fi utilizata doar pentru a scrie noi clase ce o extind si niciodata nu poate fi invocata in initializarea directa unui obiect.

O clasa abstracta poate contine una sau mai multe metode abstracte, ale carui corp nu va fi declarat. Aceasta va obliga clasa care extinde clasa abstracta sa declare toate metodele abstracte definite. Exceptie o fac doar clasele abstracte ce extind clase abstracte, dar o clasa normala va fi obligata sa declare toate metodele abstracte mostenite.

Utilizarea claselor abstracte poate fi necesara in diverse cazuri:

  • obligatia de a construi o clasa ce va implementa obligatoriu metode asteptate
  • obligatia de a porni de la acest schelet ca baza

Reguli ce privesc clasele abstracte:

  • Orice clasa care contine o metoda abstracta, trebuie implicit declarata abstracta
  • Orice metoda declarata abstracta, in implementare trebuie sa contina acelasi nevel de acces sau mai slab; cand metoda abstracta e declarata protejata, ea poate fi implementata ca protejata sau publica, dar nu privata; o metoda abstracta declarata publica, obligatoriu va fi declarata public
  • O clasa abstracta nu poate fi initializata ca obiect
  • Orice metoda abstracta nu poate contine corp de functie
  • Daca declari o clasa extinzand o clasa abstracta, esti obligat sa declari clasa tot abstracta

Exemplu:

Cand nu este ideala utilizarea unei clase abstracte, alternativa ei este Interfata, ce o vom discuta ulterior.

De ce este esențială programarea condusă prin teste (aka Test Driven Development / TDD)

În majoritatea cazurilor, programatorii sunt prea leneși și sar peste teste, confortându-se că sursele lor deja sunt funcționale și nu mai scriu testele unitare de bază.

Scopul testelor este de a împiedica în viitoarele schimbări să intervină probleme critice.

Scrierea testelor după ce codul a fost scris este o altă problemă pentru că testează doar cod și nu funcționalitatea.

Scopul scrierii testului înaintea codului propriu-zis este să știm precis că obținem funcționalitatea dorită și se face constructiv pas cu pas, eliminând astfel posibilitatea unui eșec grav când aplicația este utilizată public.

Majoritatea dau vina că prin această metodă durează mult mai mult să dezvolți o componentă, mai ales o aplicație.

Aceasta este o minciună spusă total cu nerușinare!

Scrierea unei aplicații sau componente folosind metodologia TDD se face mai repede cu garantarea funcționalității.

Un bun programator care a exersat continuu, ajunge în a scrie cod în acest mod la fel de rapid și mult mai cursiv. Această persoană va ști pe termen lung mult mai bine tot ce a așezat în acele surse. În momentele în care se vor adăuga noi componente aplicației, se va ști precis că ceea ce deja există funcționează în continuare fără probleme.

Type hinting și tipul valorii întoarse

Din PHP 7.0.0, limbajul ne lasă să fim mult mai specifici în ce vor accepta și ce vor întoarce funcțiile, respectiv metodele din obiecte.

Poți indica ce tip de argument are nevoie funcția (type hinting – indiciu de tip) și ce tip de rezultat vor întoarce (return type – tipul întoarcerii).

Iată un exemplu:

declare(strict_types=1);

function adaugaNumere (int $a, int $b, boolean $afiseazaSuma): int
{
  $suma = $a + $b;
  if ($afiseazaSuma) {
    echo $suma;
  }
  return $suma;
}

adaugaNumere(1, 2, true); // succes
adaugaNumere(1, "2", true); // eroare, am declarat strict_types activ
adaugaNumere(1, "string", true); // eroare, indiferent de valoarea lui stric_types

Această funcție primește două argumente numere întregi (integer) și o valoare booleană. Va întoarce un număr întreg.

Declarația lui strict_types (tipuri stricte) se face întotdeauna la începutul fișierului pentru a informa compilatorul intenția de a utiliza acest mod.

Encapsulare și delegare

Encapsularea:

Obiectele își văd de propria lor treabă și de ceea ce au de făcut în spatele ușilor închise. Ele oferă interfața prin care orice cerere (Request) și răspuns (Response) pot fi trecute. Orice date nu trebuie expuse și părțile murdare ale implementării, sunt ascunse în spatele acestor uși.

Un exemplu de delegare aplicat ar fi MVC-ul:

Controllerul, într-un proiect scris folosind OOP și MVC, este surprinzător de simplu și scurt, el invocând în general obiecte din clasele Model și oferind toate datele procesate unui View responsabil de modul expunerii datelor (HTML, Json, XML etc.). Ideal în Controller vom face invocarea Model-elor necesare doar folosind argumentele din Request și rezultatele vor fi oferite View-ului care ideal nu va procesa absolut nimic, ci doar va fi responsabil de afișare, adică un șablon (template) ce aplică valorile primite.

Conceptul este descris doar minimal, dar în realitate, el fiind aplicat extrem de complicat de menținătorii unora din cele mai populare framework-uri, ironie sau genialitate ce o voi lăsa pentru un articol dedicat acestui subiect.

Paradigma programării orientate pe obiect

Ca multe alte paradigme, programarea orientată pe obiecte, OOP, s-a născut din necesitatea manevrării complexității. Ideea principală este de a împărți întregul sistem în piese cât mai mici, izolate una de cealaltă. Dacă aceste piese mici pot ascunde cât mai multe detalii de implementare, vor deveni ușor de folosit.

O analogie a modului de funcționare al unui automobil poate ajuta înțelegerea principiului mai ușor.

Când conduci o mașină, operezi o intefață: direcția, ambreiajul, accelerația, frâna. Necesarul de cunoștințe de a manevra mașina este limitat de interfață. Această interfață în esență ascunde toate sistemele complexe care fac mașina să funcționeze, cum ar fi motorul acesteia, sistemul electronic, și multe altele. Ca șofer, nu trebuie să te îngrijorezi de acele sisteme complexe.

O idee similară este împărtășită și de OOP. Obiectul ascunde complexitatea funcționalității lui și expune o interfață limitată, ușor de utilizat. Adițional, un obiect poate ascunde anumite parți și preveni modificarea lor directă, un aspect important al OOP.

În aplicații mari și complexe, unde dezastre se pot întâmpla când accesarea directă a proprietăților este posibilă, OOP operează pe ideea că acele proprietăți vor fi ascunse și inaccesibile altor factori în afara obiectului și vor fi accesibile doar prin operații oferite de interfața publică.