Компоновщик (англ.Composite pattern) — структурныйшаблон проектирования, объединяющий объекты в древовидную структуру для представления иерархии от частного к целому. Компоновщик позволяет клиентам обращаться к отдельным объектам и к группам объектов одинаково.
Паттерн определяет иерархию классов, которые одновременно могут состоять из примитивных и сложных объектов, упрощает архитектуру клиента, делает процесс добавления новых видов объекта более простым.
importjava.util.List;importjava.util.ArrayList;/** "Component" */interfaceGraphic{//Prints the graphic.publicvoidprint();}/** "Composite" */classCompositeGraphicimplementsGraphic{//Collection of child graphics.privateList<Graphic>mChildGraphics=newArrayList<Graphic>();//Prints the graphic.publicvoidprint(){for(Graphicgraphic:mChildGraphics){graphic.print();}}//Adds the graphic to the composition.publicvoidadd(Graphicgraphic){mChildGraphics.add(graphic);}//Removes the graphic from the composition.publicvoidremove(Graphicgraphic){mChildGraphics.remove(graphic);}}/** "Leaf" */classEllipseimplementsGraphic{//Prints the graphic.publicvoidprint(){System.out.println("Ellipse");}}/** Client */publicclassProgram{publicstaticvoidmain(String[]args){//Initialize four ellipsesEllipseellipse1=newEllipse();Ellipseellipse2=newEllipse();Ellipseellipse3=newEllipse();Ellipseellipse4=newEllipse();//Initialize three composite graphicsCompositeGraphicgraphic=newCompositeGraphic();CompositeGraphicgraphic1=newCompositeGraphic();CompositeGraphicgraphic2=newCompositeGraphic();//Composes the graphicsgraphic1.add(ellipse1);graphic1.add(ellipse2);graphic1.add(ellipse3);graphic2.add(ellipse4);graphic.add(graphic1);graphic.add(graphic2);//Prints the complete graphic (four times the string "Ellipse").graphic.print();}}
Пример на C#
Исходный текст на языке C#
classMainApp{staticvoidMain(){// Create a tree structureCompositeroot=newComposite("root");root.Add(newLeaf("Leaf A"));root.Add(newLeaf("Leaf B"));Compositecomp=newComposite("Composite X");comp.Add(newLeaf("Leaf XA"));comp.Add(newLeaf("Leaf XB"));root.Add(comp);root.Add(newLeaf("Leaf C"));// Add and remove a leafLeafleaf=newLeaf("Leaf D");root.Add(leaf);root.Remove(leaf);// Recursively display treeroot.Display(1);// Wait for userConsole.Read();}}/// <summary>/// Component - компонент/// </summary>/// <li>/// <lu>объявляет интерфейс для компонуемых объектов;</lu>/// <lu>предоставляет подходящую реализацию операций по умолчанию,/// общую для всех классов;</lu>/// <lu>объявляет интерфейс для доступа к потомкам и управлению ими;</lu>/// <lu>определяет интерфейс доступа к родителю компонента в рекурсивной структуре/// и при необходимости реализует его. Описанная возможность необязательна;</lu>/// </li>abstractclassComponent{protectedstringname;// ConstructorpublicComponent(stringname){this.name=name;}publicabstractvoidDisplay(intdepth);}/// <summary>/// Composite - составной объект/// </summary>/// <li>/// <lu>определяет поведение компонентов, у которых есть потомки;</lu>/// <lu>хранит компоненты-потомоки;</lu>/// <lu>реализует относящиеся к управлению потомками операции и интерфейсе/// класса <see cref="Component"/></lu>/// </li>classComposite:Component{privateList<Component>children=newList<Component>();// ConstructorpublicComposite(stringname):base(name){}publicvoidAdd(Componentcomponent){children.Add(component);}publicvoidRemove(Componentcomponent){children.Remove(component);}publicoverridevoidDisplay(intdepth){Console.WriteLine(newString('-',depth)+name);// Recursively display child nodesforeach(Componentcomponentinchildren){component.Display(depth+2);}}}/// <summary>/// Leaf - лист/// </summary>/// <remarks>/// <li>/// <lu>представляет листовой узел композиции и не имеет потомков;</lu>/// <lu>определяет поведение примитивных объектов в композиции;</lu>/// </li>/// </remarks>classLeaf:Component{// ConstructorpublicLeaf(stringname):base(name){}publicoverridevoidDisplay(intdepth){Console.WriteLine(newString('-',depth)+name);}}
Пример на C++
Исходный текст на языке C++
#include<iostream>#include<list>#include<algorithm>#include<memory>classIText{public:typedefstd::shared_ptr<IText>SPtr;virtualvoiddraw()=0;virtualvoidadd(constSPtr&){throwstd::runtime_error("IText: Can't add to a leaf");}virtualvoidremove(constSPtr&){throwstd::runtime_error("IText: Can't remove from a leaf");}};classCompositeText:publicIText{public:voidadd(constSPtr&sptr){children_.push_back(sptr);}voidremove(constSPtr&sptr){children_.remove(sptr);}voidreplace(constSPtr&oldValue,constSPtr&newValue){std::replace(children_.begin(),children_.end(),oldValue,newValue);}virtualvoiddraw(){for(SPtr&sptr:children_){sptr->draw();}}private:std::list<SPtr>children_;};classLetter:publicIText{public:Letter(charc):c_(c){}virtualvoiddraw(){std::cout<<c_;}private:charc_;};intmain(){CompositeTextsentence;IText::SPtrlSpace(newLetter(' '));IText::SPtrlExcl(newLetter('!'));IText::SPtrlComma(newLetter(','));IText::SPtrlNewLine(newLetter('\n'));IText::SPtrlH(newLetter('H'));// letter 'H'IText::SPtrle(newLetter('e'));// letter 'e'IText::SPtrll(newLetter('l'));// letter 'l'IText::SPtrlo(newLetter('o'));// letter 'o'IText::SPtrlW(newLetter('W'));// letter 'W'IText::SPtrlr(newLetter('r'));// letter 'r'IText::SPtrld(newLetter('d'));// letter 'd'IText::SPtrli(newLetter('i'));// letter 'i'IText::SPtrwHello(newCompositeText);wHello->add(lH);wHello->add(le);wHello->add(ll);wHello->add(ll);wHello->add(lo);IText::SPtrwWorld(newCompositeText);// word "World"wWorld->add(lW);wWorld->add(lo);wWorld->add(lr);wWorld->add(ll);wWorld->add(ld);sentence.add(wHello);sentence.add(lComma);sentence.add(lSpace);sentence.add(wWorld);sentence.add(lExcl);sentence.add(lNewLine);sentence.draw();// prints "Hello, World!\n"IText::SPtrwHi(newCompositeText);// word "Hi"wHi->add(lH);wHi->add(li);sentence.replace(wHello,wHi);sentence.draw();// prints "Hi, World!\n"sentence.remove(wWorld);sentence.remove(lSpace);sentence.remove(lComma);sentence.draw();// prints "Hi!\n"return0;}
fromabcimportABCMeta,abstractmethodclassUnit(metaclass=ABCMeta):""" Абстрактный компонент, в данном случае это - отряд (отряд может состоять из одного солдата или более) """@abstractmethoddefprint(self)->None:""" Вывод данных о компоненте """passclassArcher(Unit):""" Лучник """defprint(self)->None:print('лучник',end=' ')classKnight(Unit):""" Рыцарь """defprint(self)->None:print('рыцарь',end=' ')classSwordsman(Unit):""" Мечник """defprint(self)->None:print('мечник',end=' ')classSquad(Unit):""" Компоновщик - отряд, состоящий более чем из одного человека. Также может включать в себя другие отряды-компоновщики. """def__init__(self):self._units=[]defprint(self)->None:print("Отряд {} (".format(self.__hash__()),end=' ')foruinself._units:u.print()print(')')defadd(self,unit:Unit)->None:""" Добавление нового отряда :param unit: отряд (может быть как базовым, так и компоновщиком) """self._units.append(unit)unit.print()print('присоединился к отряду {}'.format(self.__hash__()))print()defremove(self,unit:Unit)->None:""" Удаление отряда из текущего компоновщика :param unit: объект отряда """foruinself._units:ifu==unit:self._units.remove(u)u.print()print('покинул отряд {}'.format(self.__hash__()))print()breakelse:unit.print()print('в отряде {} не найден'.format(self.__hash__()))print()if__name__=='__main__':print('OUTPUT:')squad=Squad()squad.add(Knight())squad.add(Knight())squad.add(Archer())swordsman=Swordsman()squad.add(swordsman)squad.remove(swordsman)squad.print()squad_big=Squad()squad_big.add(Swordsman())squad_big.add(Swordsman())squad_big.add(squad)squad_big.print()'''OUTPUT:рыцарь присоединился к отряду -9223363262492103834рыцарь присоединился к отряду -9223363262492103834лучник присоединился к отряду -9223363262492103834мечник присоединился к отряду -9223363262492103834мечник покинул отряд -9223363262492103834Отряд -9223363262492103834 ( рыцарь рыцарь лучник )мечник присоединился к отряду 8774362671992мечник присоединился к отряду 8774362671992Отряд -9223363262492103834 ( рыцарь рыцарь лучник )присоединился к отряду 8774362671992Отряд 8774362671992 ( мечник мечник Отряд -9223363262492103834 ( рыцарь рыцарь лучник ))'''
Пример на PHP5
Исходный текст на языке PHP5
<?phpabstractclassComponent{protected$name;publicfunction__construct($name){$this->name=$name;}publicabstractfunctiondisplay();}classCompositeextendsComponent{private$children=array();publicfunctionadd(Component$component){$this->children[$component->name]=$component;}publicfunctionremove(Component$component){unset($this->children[$component->name]);}publicfunctiondisplay(){foreach($this->childrenas$child){$child->display();}}}classLeafextendsComponent{publicfunctiondisplay(){print_r($this->name);}}// Create a tree structure$root=newComposite("root");$root->add(newLeaf("Leaf A"));$root->add(newLeaf("Leaf B"));$comp=newComposite("Composite X");$comp->add(newLeaf("Leaf XA"));$comp->add(newLeaf("Leaf XB"));$root->add($comp);$root->add(newLeaf("Leaf C"));// Add and remove a leaf$leaf=newLeaf("Leaf D");$root->add($leaf);$root->remove($leaf);// Recursively display tree$root->display();?>
Пример компоновщика с внешним итератором на PHP5
Исходный текст на языке PHP5
/** * Паттерн-компоновщик с внешним итератором * Итератор использует рекурсию для перебора дерева элементов */namespacecompositeIterator{/** * Клиент использует интерфейс AComponent для работы с объектами. * Интерфейс AComponent определяет интерфейс для всех компонентов: как комбинаций, так и листовых узлов. * AComponent может реализовать поведение по умолчанию для add() remove() getChild() и других операций */abstractclassAComponent{public$customPropertyName;public$customPropertyDescription;/** * @param AComponent $component */publicfunctionadd($component){thrownew\Exception("Unsupported operation");}/** * @param AComponent $component */publicfunctionremove($component){thrownew\Exception("Unsupported operation");}/** * @param int $int */publicfunctiongetChild($int){thrownew\Exception("Unsupported operation");}/** * @return IPhpLikeIterator */abstractfunctioncreateIterator();publicfunctionoperation1(){thrownew\Exception("Unsupported operation");}}/** * Leaf наследует методы add() remove() getChild( которые могут не иметь смысла для листового узла. * Хотя листовой узел можно считать узлом с нулём дочерних объектов * * Leaf определяет поведение элементов комбинации. Для этого он реализует операции, поддерживаемые интерфейсом Composite. */classLeafextendsAComponent{publicfunction__construct($name,$description=''){$this->customPropertyName=$name;$this->customPropertyDescription=$description;}publicfunctioncreateIterator(){returnnewNullIterator();}publicfunctionoperation1(){echo("\n I'am leaf {$this->customPropertyName}, i don't want to do operation 1. {$this->customPropertyDescription}");}}classNullIteratorimplementsIPhpLikeIterator{publicfunctionvalid(){return(false);}publicfunctionnext(){return(false);}publicfunctioncurrent(){return(null);}publicfunctionremove(){thrownew\CException('unsupported operation');}}/** * Интерфейс Composite определяет поведение компонентов, имеющих дочерние компоненты, и обеспечивает хранение последних. * * Composite также реализует операции, относящиеся к Leaf. Некоторые из них не могут не иметь смысла для комбинаций; в таких случаях генерируется исключение. */classCompositeextendsAComponent{private$_iterator=null;/** * @var \ArrayObject AComponent[] $components для хранения потомков типа AComponent */public$components=null;publicfunction__construct($name,$description=''){$this->customPropertyName=$name;$this->customPropertyDescription=$description;}/** * @param AComponent $component */publicfunctionadd($component){if(is_null($this->components)){$this->components=new\ArrayObject;}$this->components->append($component);}publicfunctionremove($component){foreach($this->componentsas$i=>$c){if($c===$component){unset($this->components[$i]);}}}publicfunctiongetChild($int){return($this->components[$int]);}publicfunctionoperation1(){echo"\n\n$this->customPropertyName$this->customPropertyDescription";echo"\n --------------------------------";$iterator=$this->components->getIterator();while($iterator->valid()){$component=$iterator->current();$component->operation1();$iterator->next();}}/** * @return CompositeIterator */publicfunctioncreateIterator(){if(is_null($this->_iterator)){$this->_iterator=newCompositeIterator($this->components->getIterator());}return($this->_iterator);}}/** * Рекурсивный итератор компоновщика */classCompositeIteratorimplementsIPhpLikeIterator{public$stack=array();/** * @param \ArrayIterator $componentsIterator */publicfunction__construct($componentsIterator){//$this->stack= new \ArrayObject;$this->stack[]=$componentsIterator;}publicfunctionremove(){thrownew\CException('unsupported operation');}publicfunctionvalid(){if(empty($this->stack)){return(false);}else{/** @var $componentsIterator \ArrayIterator */// берём первый элемент$componentsIterator=array_shift(array_values($this->stack));if($componentsIterator->valid()){return(true);}else{array_shift($this->stack);return($this->valid());}}}publicfunctionnext(){/** @var $componentsIterator \ArrayIterator */$componentsIterator=current($this->stack);$component=$componentsIterator->current();if($componentinstanceofComposite){array_push($this->stack,$component->createIterator());}$componentsIterator->next();//return($component);}publicfunctioncurrent(){if($this->valid()){/** @var $componentsIterator \ArrayIterator */// берём первый элемент$componentsIterator=array_shift(array_values($this->stack));return($componentsIterator->current());}else{return(null);}}}/** * Интерфейс Iterator должен быть реализован всеми итераторами. * Данный интерфейс является частью интерфейса стандартного php итератора. * Конкретный Iterator отвечает за управление текущей позицией перебора в конкретной коллекции. */interfaceIPhpLikeIterator{/** * @abstract * @return boolean есть ли текущий элемент */publicfunctionvalid();/** * @abstract * @return mixed перевести курсор дальше */publicfunctionnext();/** * @abstract * @return mixed получить текущий элемент */publicfunctioncurrent();/** * удалить текущий элемент коллекции * @abstract * @return void */publicfunctionremove();}classClient{/** * @var AComponent */public$topItem;publicfunction__construct($topItem){$this->topItem=$topItem;}publicfunctionprintOperation1(){$this->topItem->operation1();}publicfunctionprintOperation2(){echo"\n\n\n";$iterator=$this->topItem->createIterator();while($iterator->valid()){/** @var $component AComponent */$component=$iterator->current();if(strstr($component->customPropertyName,'leaf1')){echo("\n I'm Client, I found leaf {$component->customPropertyName}, I'll just leave it here (for my 'first-leafs' tea collection). {$component->customPropertyDescription}");}$iterator->next();}}}classTest{publicstaticfunctiongo(){$a=newComposite("c1");$b=newComposite("c2");$c=newComposite("c3");$topItem=newComposite("top item");$topItem->add($a);$topItem->add($b);$topItem->add($c);$a->add(newLeaf("c1-leaf1"));$a->add(newLeaf("c1-leaf2"));$b->add(newLeaf("c2-leaf1"));$b->add(newLeaf("c2-leaf2"));$b->add(newLeaf("c2-leaf3"));$c->add(newLeaf("c3-leaf1"));$c->add(newLeaf("c3-leaf2"));$client=newClient($topItem);$client->printOperation1();$client->printOperation2();}}Test::go();}
ClassProgramSharedSubMain()' Create a tree structureDimrootAsComponent=NewComposite("root")root.Add(NewLeaf("Leaf A"))root.Add(NewLeaf("Leaf B"))DimcompAsComponent=NewComposite("Composite X")comp.Add(NewLeaf("Leaf XA"))comp.Add(NewLeaf("Leaf XB"))root.Add(comp)root.Add(NewLeaf("Leaf C"))' Add and remove a leafDimleafAsNewLeaf("Leaf D")root.Add(leaf)root.Remove(leaf)' Recursively display treeroot.Display(1)' Wait for userConsole.Read()EndSubEndClass''' <summary>''' Component - компонент''' </summary>''' <li>''' <lu>объявляет интерфейс для компонуемых объектов;</lu>''' <lu>предоставляет подходящую реализацию операций по умолчанию,''' общую для всех классов;</lu>''' <lu>объявляет интерфейс для доступа к потомкам и управлению ими;</lu>''' <lu>определяет интерфейс доступа к родителю компонента в рекурсивной структуре''' и при необходимости реализует его. Описанная возможность необязательна;</lu>''' </li>MustInheritClassComponentProtectednameAsString' ConstructorPublicSubNew(ByValnameAsString)Me.name=nameEndSubPublicMustOverrideSubAdd(ByValcAsComponent)PublicMustOverrideSubRemove(ByValcAsComponent)PublicMustOverrideSubDisplay(ByValdepthAsInteger)EndClass''' <summary>''' Composite - составной объект''' </summary>''' <li>''' <lu>определяет поведеление компонентов, у которых есть потомки;</lu>''' <lu>хранит компоненты-потомоки;</lu>''' <lu>реализует относящиеся к управлению потомками операции и интерфейсе''' класса <see cref="Component"/></lu>''' </li>ClassCompositeInheritsComponentPrivatechildrenAsNewArrayList()' ConstructorPublicSubNew(ByValnameAsString)MyBase.New(name)EndSubPublicOverridesSubAdd(ByValcomponentAsComponent)children.Add(component)EndSubPublicOverridesSubRemove(ByValcomponentAsComponent)children.Remove(component)EndSubPublicOverridesSubDisplay(ByValdepthAsInteger)Console.WriteLine(NewString("-"c,depth)&name)' Recursively display child nodesForEachcomponentAsComponentInchildrencomponent.Display(depth+2)NextEndSubEndClass''' <summary>''' Leaf - лист''' </summary>''' <remarks>''' <li>''' <lu>представляет листовой узел композиции и не имеет потомков;</lu>''' <lu>определяет поведение примитивных объектов в композиции;</lu>''' </li>''' </remarks>ClassLeafInheritsComponent' ConstructorPublicSubNew(ByValnameAsString)MyBase.New(name)EndSubPublicOverridesSubAdd(ByValcAsComponent)Console.WriteLine("Cannot add to a leaf")EndSubPublicOverridesSubRemove(ByValcAsComponent)Console.WriteLine("Cannot remove from a leaf")EndSubPublicOverridesSubDisplay(ByValdepthAsInteger)Console.WriteLine(NewString("-"c,depth)&name)EndSubEndClass
Katedral VitebskKatedral Yesus yang PengasihКафедральны сабор Ісуса МіласэрнагаKatedral VitebskLokasiVitebskNegara BelarusDenominasiGereja Katolik RomaArsitekturStatusKatedralStatus fungsionalAktifAdministrasiKeuskupanKeuskupan Vitebsk Katedral Yesus Yang Maha Pengasih [1] (bahasa Belarus: Катэдральны Ісуса Мілассрнага) juga dikenal sebagai Katedral Vitebsk adalah sebuah gereja katedral Katolik yang terletak di Vitebs...
Cet article est une ébauche concernant le Québec et la géographie. Vous pouvez partager vos connaissances en l’améliorant (comment ?) selon les recommandations des projets correspondants. Détroit d'Hudson Le détroit d'Hudson est le passage en haut à droite entre l'île de Baffin et le Québec, conduisant à la baie d'Hudson. Géographie humaine Pays côtiers Canada Géographie physique Type Détroit Localisation Baie d'Hudson et passage du Nord-Ouest - détroit de Davis (océan...
Ian BremmerBremmer pada tahun 2014Lahir12 November 1969 (umur 54)Baltimore, Maryland, Amerika SerikatPekerjaanIlmuwan politik, penulis, pengusaha, pengajarKebangsaanAmerika SerikatPendidikanBA, Universitas TulanePhD, Universitas StanfordWebsiteianbremmer.com Ian Arthur Bremmer (lahir 12 November 1969) adalah ilmuwan politik Amerika Serikat yang mendalami kebijakan luar negeri AS, negara-negara yang mengalami transisi, dan risiko politik global. Ia merupakan presiden sekaligus pendiri Eur...
Kybartai Héraldique L'église Saint-Alexandre-Nevski. Administration Pays Lituanie Région Sudovie Apskritis Apskritis de Marijampolė Municipalité Municipalité du district de Vilkaviškis Seniūnija Kybartų seniūnija Senior Audrius Balbierius Code postal LT-70065 Démographie Population 4 461 hab. (2020) Densité 959 hab./km2 Géographie Coordonnées 54° 38′ 20″ nord, 22° 45′ 20″ est Altitude 70 m Superficie 465 ha =...
British politician (born 1952) David DrewOfficial portrait, 2017Shadow Minister for Farming and Rural AffairsIn office3 July 2017 – 12 December 2019LeaderJeremy CorbynPreceded byMary GlindonSucceeded byDaniel ZeichnerMember of Parliament for StroudIn office8 June 2017 – 6 November 2019Preceded byNeil CarmichaelSucceeded bySiobhan BaillieIn office1 May 1997 – 12 April 2010Preceded byRoger KnapmanSucceeded byNeil Carmichael Personal detailsBorn (1952-04-13) 13 A...
The Book of Traversing Eternity is an ancient Egyptian funerary text used primarily in the Roman period of Egyptian history (30 BC – AD 390). The earliest known copies date to the preceding Ptolemaic Period (332–30 BC), making it most likely that the book was composed at that time.[1] The book describes the deceased soul as visiting temples in Egypt and participating in the cycle of periodic religious rituals, particularly those related to the funerary god Osiris. Some scholars ha...
This article includes a list of general references, but it lacks sufficient corresponding inline citations. Please help to improve this article by introducing more precise citations. (June 2020) (Learn how and when to remove this template message) The city limits of Paris, from the 4th century to present Gallo-Roman wall First medieval wall Wall of Philip II Augustus Wall of Charles V Wall of Louis XIII Wall of the Ferme...
Ancient Greek poet Hipponax from Guillaume Rouillé's Promptuarii Iconum Insigniorum (1553) Hipponax (Ancient Greek: Ἱππῶναξ; gen. Ἱππώνακτος; fl. late 6th century BC),[1] of Ephesus and later Clazomenae, was an Ancient Greek iambic poet who composed verses depicting the vulgar side of life in Ionian society. He was celebrated by ancient authors for his malicious wit (especially for his attacks on some contemporary sculptors, Bupalus and Athenis), and he was ...
Japanese manga series and franchise This article is about the manga series. For the anime adaptation, see Attack on Titan (TV series). For related items, see Attack on Titan (disambiguation). AoT redirects here. For other uses, see AOT. Attack on TitanFirst tankōbon volume cover, featuring Eren Yeager about to attack the oncoming Colossal Titan進撃の巨人(Shingeki no Kyojin)GenreAction[1]Dark fantasy[2]Post-apocalyptic[3][4] MangaWritten byHajime Isay...
Lisa McShea Nazionalità Australia Altezza 174 cm Peso 61 kg Tennis Carriera Singolare1 Vittorie/sconfitte 272-224 Titoli vinti 0 Miglior ranking 139º (31 luglio 2000) Risultati nei tornei del Grande Slam Australian Open 1T (1994, 2000) Roland Garros Wimbledon US Open 1T (1999) Doppio1 Vittorie/sconfitte 439-203 Titoli vinti 4 Miglior ranking 32º (17 gennaio 2005) Risultati nei tornei del Grande Slam Australian Open 3T (2001) Roland Garros 2T (2000...
Ираклеониты — ученики гностика Ираклеона (II век). Упоминаются как особая секта Епифанием и Августином; при крещении и миропомазании они соблюдали обряд помазания елеем и при этом произносили воззвания на арамейском языке, которые должны были освободить душу от власт�...
Village in South Governorate, LebanonAin El Delb عين الدلبVillageAin El DelbLocation in LebanonCoordinates: 33°32′28″N 35°23′18″E / 33.541104°N 35.388272°E / 33.541104; 35.388272Country LebanonGovernorateSouth GovernorateDistrictSidon DistrictTime zoneUTC+2 (EET) • Summer (DST)UTC+3 (EEST) Ain El Delb (عين الدلب) is a small village in the Sidon District of the South Governorate in Lebanon. History In 1875 Victor Guérin foun...
Deemed University in Tamil Nadu This article needs additional citations for verification. Please help improve this article by adding citations to reliable sources. Unsourced material may be challenged and removed.Find sources: Hindustan Institute of Technology and Science – news · newspapers · books · scholar · JSTOR (October 2023) (Learn how and when to remove this message) Hindustan Institute of Technology and Science (Deemed To Be University)Hindust...
Dalam nama Tionghoa ini, nama keluarganya adalah Chong (张). Yang Berbahagia DatukChong Sin Woon张盛闻 Wakil Menteri Pendidikan IIMasa jabatan29 Juli 2015 – 10 Mei 2018Penguasa monarkiAbdul Halim (2015–2016) Muhammad V (2016–2018)Perdana MenteriNajib RazakMenteriMahdzir KhalidPendahuluMary YapPenggantiTeo Nie Ching (Wakil Menteri Pendidikan)Daerah pemilihanSenatorSenatorMasa jabatan21 April 2014 – 20 April 2020Penguasa monarkiAbdul Halim (2014–2016) Muhammad V ...
Artikel ini perlu diterjemahkan dari bahasa Inggris ke bahasa Indonesia. Artikel ini ditulis atau diterjemahkan secara buruk dari Wikipedia bahasa Inggris. Jika halaman ini ditujukan untuk komunitas bahasa Inggris, halaman itu harus dikontribusikan ke Wikipedia bahasa Inggris. Lihat daftar bahasa Wikipedia. Artikel yang tidak diterjemahkan dapat dihapus secara cepat sesuai kriteria A2. Jika Anda ingin memeriksa artikel ini, Anda boleh menggunakan mesin penerjemah. Namun ingat, mohon tidak men...
English mathematician (1815–1852) For the computer microarchitecture, see Ada Lovelace (microarchitecture). The Right HonourableThe Countess of LovelaceDaguerreotype by Antoine Claudet (c. 1843)[1]BornHon. Augusta Ada Byron(1815-12-10)10 December 1815London, EnglandDied27 November 1852(1852-11-27) (aged 36)Marylebone, London, EnglandResting placeChurch of St. Mary Magdalene, Hucknall, Nottingham, EnglandKnown forMathematics, computingSpouse William King-Noel, 1st Earl of L...
كورنيش الإسكندرية منظر عام للكورنيش بمنطقة سان ستيفانو اسم آخر طريق الجيش، طريق 26 يوليو البلد مصر تاريخ الافتتاح 1935 (منذ 89 سنة) التصنيف طريق مزدوج المميزات الطول 17 كم الاتجاه شرق - غرب النهاية شرق بحري التقاطعات شارع قناة السويس، شارع محمد نجيب، شارع مصطفى النحاس النهاي...
يونكرز يو 87معلومات عامةالنوع قاذفة قنابلبلد الأصل ألمانيا النازيةالتطوير والتصنيعالصانع يونكرز — Junkers Motorenbau und Junkers Flugzeugwerk (en) المصمم Hermann Pohlmann (en) الكمية المصنوعة 6,500سيرة الطائرةدخول الخدمة 1937 انتهاء الخدمة 1945أول طيران 17 سبتمبر 1935الوضع الحالي منتهية الخدمةالخدمةالمست...