Pagini

2013-06-26

Singleton, Prototype si Object Pool - in romana

Celelalte 3 Design Pattern-uri creationale, conform sourcemaking.com. O sa parafrazez grosolan de acolo in cele ce urmeaza.

Design Pattern-ul Singleton

Cred ca este unul dintre cele mai cunoscute design pattern-uri. Intentia lui este sa puna la dispozitie la nivel global o instanta unica a unei anumite clase, care, in plus, poate fi initializata lenes (lazy), just-in-time.

2013-06-17

Ordinea in care se initializeaza membrii claselor in C#

Se pune urmatorul cod in LINQPad:


void Main() {
 Derived d = new Derived();
}

class Base {
   public Base() { 
       Console.WriteLine( "Base.Instance.Constructor" );
       this.m_Field3 = new Tracker( "Base.Instance.Field3 (in instance constructor)" );
       this.Virtual();
   }
   static Base() {
       Console.WriteLine( "Base.Static.Constructor" );
   }
   virtual public void Virtual() {
       Console.WriteLine( "Base.Instance.Virtual" );
   }
   private Tracker m_Field1 = new Tracker( "Base.Instance.Field1" );
   private Tracker m_Field2 = new Tracker( "Base.Instance.Field2" );
   private Tracker m_Field3;
   static private Tracker s_Field1 = new Tracker( "Base.Static.Field1" );
   static private Tracker s_Field2 = new Tracker( "Base.Static.Field2" );
}

class Derived : Base {
   public Derived() {
       Console.WriteLine( "Derived.Instance.Constructor" );
       this.m_Field3 = new Tracker( "Derived.Instance.Field3 (in instance constructor)" );
   }
   static Derived() {
       Console.WriteLine( "Derived.Static.Constructor" );
   }
   override public void Virtual() {
       Console.WriteLine( "Derived.Instance.Virtual" );
   }
   
   private Tracker m_Field1 = new Tracker( "Derived.Instance.Field1" );
   private Tracker m_Field2 = new Tracker( "Derived.Instance.Field2" );
   private Tracker m_Field3;
   static private Tracker s_Field1 = new Tracker( "Derived.Static.Field1" );
   static private Tracker s_Field2 = new Tracker( "Derived.Static.Field2" );
}

class Tracker {
   public Tracker( string text ) {
       Console.WriteLine( text );
   }
}

se apasa F5 si apoi se admira rezultatul:

Derived.Static.Field1
Derived.Static.Field2
Derived.Static.Constructor
Derived.Instance.Field1
Derived.Instance.Field2
Base.Static.Field1
Base.Static.Field2
Base.Static.Constructor
Base.Instance.Field1
Base.Instance.Field2
Base.Instance.Constructor
Base.Instance.Field3  (in instance  constructor)
Derived.Instance.Virtual
Derived.Instance.Constructor
Derived.Instance.Field3  (in instance constructor)


Concluzia? membrii claselor se initializeaza in ordinea urmatoare:
  1. membrii statici initializati la declarare
  2. constructorul static
  3. membrii de instanta initializati la declarare
  4. clasa de baza
  5. constructorul

2013-05-15

Despre variabile si legaturi in Common Lisp

Notite pentru textul asta.

O variabila e un loc in care poti sa stochezi o valoare la un moment dat.
O variabila este desemnata in program printr-un identificator.
Exista o diferenta intre a crea o variabila si a schimba valoarea stocata intr-o variabila existenta, desi lucrul asta nu este evident in multe limbaje (ex. Python)
Asocierea dintre identificator si variabila (adica locul in care poti sa stochezi o valoare la un moment dat) se numeste legatura (binding).

Intrebari de la un interviu

1. Ce afiseaza programul de mai jos?

using System;
using System.Collections.Generic;

public class Fruct {
 public virtual void AutoIdentificare() {
  Console.WriteLine("Fruct");
 }
}

public class Banana : Fruct {
 public override void AutoIdentificare() {
  Console.WriteLine("Banana");
 }
}

public class Mar : Fruct {
 public override void AutoIdentificare() {
  base.AutoIdentificare();
  Console.WriteLine("Mar");
 }
}

public class Piersica : Fruct {
 public new void AutoIdentificare() {
  base.AutoIdentificare();
  Console.WriteLine("Piersica");
 }
}

class Program {
 static void Main() {
  List<Fruct> lista = new List<Fruct>();
  lista.Add(new Fruct());
  lista.Add(new Banana());
  lista.Add(new Mar());
  lista.Add(new Piersica());
  
  foreach (Fruct f in lista) {
   f.AutoIdentificare();
  }
 }
}


2013-05-02

Diacritice romanesti

Diacritice româneşti pentru HTML:


Valoare Cod
ă &#259;
Ă &#258;
â &#226;
 &#194;
î &#238;
Î &#206;
ş &#351;
Ş &#350;
ţ &#355;
Ţ &#354;